Innovating today, leading tomorrow

OpenSQL_Technical Guide
[OpenSQL] Contrib Extensions – Function part2

[OpenSQL] Contrib Extensions – Function part2

저번에 이어 Contrib Extension에서 Function을 제공하는 Extension을 정리한 2탄입니다.

  • pageinspect
  • pg_freespacemap
  • pg_visibility
  • pgrowlocks
  • pgstattuple

pageinspect

디버깅 목적으로 low level에서 데이터베이스 페이지의 내용을 검사할 수 있는 function을 제공합니다. 제공하는 함수가 많기 때문에, 예시는 별도로 빼지 않고 함수의 설명 바로 다음에 같이 작성되어있습니다.

일반 함수

  • get_raw_page(relname text, fork text, blkno bigint) returns bytea

명명된 relation의 지정된 블록을 읽고 복사본을 bytea 값으로 반환합니다. 이렇게 하면 블록의 일관된 복사본을 얻을 수 있습니다. fork는 main 데이터 fork, fsm은 free space map, vm은 visibility map, init은 initializtion fork를 의미합니다.

  • get_raw_page(relname text, blkno bigint) returns bytea

main fork에서 읽기 위한 get_raw_page의 축약된 버전입니다.

  • page_header(page bytea) returns record

모든 PostgreSQL 힙 및 인덱스 페이지에 공통적인 필드를 표시합니다.

예)

SELECT * FROM page_header(get_raw_page(‘pg_class’, 0));
lsn | checksum | flags | lower | upper | special | pagesize | version | prune_xid
———–+————–+——-+——–+———+———-+———–+———–+————–
0/24A1B50 | 0 | 1 | 232 | 368 | 8192 | 8192 | 4 | 0`

checksum 필드는 페이지에 저장된 체크섬이며 페이지가 손상된 경우 올바르지 않을 수 있습니다. 데이터 체크섬이 활성화 되지 않은 경우 저장된 값은 의미가 없습니다.

  • page_checksum(page bytea, blkno bigint) returns smallint

주어진 블록에 있는 것처럼 페이지의 체크섬을 계산합니다.

예)

SELECT page_checksum(get_raw_page(‘pg_class’, 0), 0);
page_checksum
———————–
13443

체크섬은 블록 번호에 따라 다르므로 일치하는 블록 번호를 전달해야 합니다. 이 함수로 계산된 체크섬은 page_header의 checksum 결과 필드와 비교할 수 있고, 인스턴스에 데이터 체크섬이 활성화 된 경우 이 두 값이 같아야 합니다.

  • fsm_page_contents(page bytea) returns text

fsm 페이지의 내부 노드 구조를 보여줍니다.

예)

SELECT fsm_page_contents(get_raw_page(‘pg_class’, ‘fsm’, 0));
fsm_page_contents
————————————

0: 89 +
1: 89 +
3: 89 +
7: 89 +
15: 89 +
31: 89 +
63: 89 +
127: 89 +
255: 89 +
511: 89 +
1023: 89 +
2047: 89 +
4095: 89 +
fp_next_slot: 0 +

페이지 내 이진 트리의 노드당 한줄로 된 여러 줄 문자열입니다. 0이 아닌 노드만 출력됩니다. 또한 페이지에서 반환될 다음 slot을 가리키는 포인터도 출력됩니다.

Heap function

  • heap_page_items(page bytea) returns setof record

힙 페이지의 모든 라인 포인터를 보여줍니다. 사용 중인 라인 포인터의 경우 튜플 헤더와 튜플 raw 데이터도 표시됩니다. raw 페이지가 복사될 때 MVCC 스냅샷에 튜플이 표시되었는지 여부에 관계없이 모든 튜플이 표시됩니다.

  • tuple_data_split(rel_oid oid, t_data bytea, t_infomask integer, t_infomask2 integer, t_bits text [, do_detoast bool]) returns bytea[]

백엔드 내부와 동일한 방식으로 튜플 데이터를 속성으로 분할합니다.

  • heap_page_item_attrs(page bytea, rel_oid regclass [, do_detoast bool]) returns setof record

튜플 raw 데이터를 선택적으로 detoast할 수 있는 속성의 배열로 반환합니다.

  • heap_tuple_infomask_flags(t_infomask integer, t_infomask2 integer) returns record

모든 플래그에 대한 하나의 열과 결합된 플래그에 대한 하나의 열이 있는 플래그 이름으로 구성된 사람이 읽을 수 있는 배열 집합으로, 반환된 t_infomask 및 t_infomask2를 디코딩합니다.

Btree function

  • bt_metap(relname text) returns record

b 트리 인덱스의 메타페이지에 대한 정보를 반환합니다.

예)

SELECT * FROM bt_metap(‘pg_cast_oid_index’);
-[ RECORD 1 ]————————+——-
magic | 340322
version | 4
root | 1
level | 0
fastroot | 1
fastlevel | 0
last_cleanup_num_delpages | 0
last_cleanup_num_tuples | 230
allequalimage | f

  • bt_page_stats(relname text, blkno bigint) returns record

b 트리 인덱스의 단일페이지에 대한 요약 정보를 반환합니다.

예)

SELECT * FROM bt_page_stats(‘pg_cast_oid_index’, 1);
-[ RECORD 1 ]——-+————–
blkno | 1
type | l
live_items | 224
dead_items | 0
avg_item_size | 16
page_size | 8192
free_size | 3668
btpo_prev | 0
btpo_next | 0
btpo_level | 0
btpo_flags | 3

  • bt_page_items(relname text, blkno bigint) returns setof record

b 트리 인덱스 페이지의 모든 항목에 대한 자세한 정보를 반환합니다.

예)

SELECT itemoffset, ctid, itemlen, nulls, vars, data, dead, htid, tids[0:2] AS some_tids
FROM bt_page_items(‘tenk2_hundred’, 5);
itemoffset | ct id | itemlen | nulls | vars | data | dead | htid | some_tids
————+———–+———–+— —-+——+————————-+——+———+———————
1 | (16,1) | 16 | f | f | 30 00 00 00 00 00 00 00| | |
2 | (16,8292) | 616 | f | f | 24 00 00 00 00 00 00 00 | f | (1,6) | {“(1,6)”,”(10,22)”}
3 | (16,8292) | 616 | f | f | 25 00 00 00 00 00 00 00 | f | (1,18) | {“(1,18)”,”(4,22)”}
4 | (16,8292) | 616 | f | f | 26 00 00 00 00 00 00 00 | f | (4,18) | {“(4,18)”,”(6,17)”}
5 | (16,8292) | 616 | f | f | 27 00 00 00 00 00 00 00 | f | (1,2) | {“(1,2)”,”(1,19)”}
6 | (16,8292) | 616 | f | f | 28 00 00 00 00 00 00 00 | f | (2,24) | {“(2,24)”,”(4,11)”}
7 | (16,8292) | 616 | f | f | 29 00 00 00 00 00 00 00 | f | (2,17) | {“(2,17)”,”(11,2)”}
8 | (16,8292) | 616 | f | f | 2a 00 00 00 00 00 00 00 | f | (0,25) | {“(0,25)”,”(3,20)”}
9 | (16,8292) | 616 | f | f | 2b 00 00 00 00 00 00 00 | f | (0,10) | {“(0,10)”,”(0,14)”}
10 | (16,8292) | 616 | f | f | 2c 00 00 00 00 00 00 00 | f | (1,3) | {“(1,3)”,”(3,9)”}
11 | (16,8292) | 616 | f | f | 2d 00 00 00 00 00 00 00 | f | (6,28) | {“(6,28)”,”(11,1)”}
12 | (16,8292) | 616 | f | f | 2e 00 00 00 00 00 00 00 | f | (0,27) | {“(0,27)”,”(1,13)”}
13 | (16,8292) | 616 | f | f | 2f 00 00 00 00 00 00 00 | f | (4,17) | {“(4,17)”,”(4,21)”}

  • bt_page_items(page bytea) returns setof record

페이지를 bytea 값으로 전달할 수 있습니다.

예)

SELECT itemoffset, ctid, itemlen, nulls, vars, data, dead, htid, tids[0:2] AS some_tids
FROM bt_page_items(get_raw_page(‘tenk2_hundred’, 5));
itemoffset | ctid | itemlen | nulls | vars | data | dead | htid | some_tids
————+———–+———+——-+——+————————-+——+——–+———————
1 | (16,1) | 16 | f | f | 30 00 00 00 00 00 00 00 | | |
2 | (16,8292) | 616 | f | f | 24 00 00 00 00 00 00 00 | f | (1,6) | {“(1,6)”,”(10,22)”}
3 | (16,8292) | 616 | f | f | 25 00 00 00 00 00 00 00 | f | (1,18) | {“(1,18)”,”(4,22)”}
4 | (16,8292) | 616 | f | f | 26 00 00 00 00 00 00 00 | f | (4,18) | {“(4,18)”,”(6,17)”}
5 | (16,8292) | 616 | f | f | 27 00 00 00 00 00 00 00 | f | (1,2) | {“(1,2)”,”(1,19)”}
6 | (16,8292) | 616 | f | f | 28 00 00 00 00 00 00 00 | f | (2,24) | {“(2,24)”,”(4,11)”}
7 | (16,8292) | 616 | f | f | 29 00 00 00 00 00 00 00 | f | (2,17) | {“(2,17)”,”(11,2)”}
8 | (16,8292) | 616 | f | f | 2a 00 00 00 00 00 00 00 | f | (0,25) | {“(0,25)”,”(3,20)”}
9 | (16,8292) | 616 | f | f | 2b 00 00 00 00 00 00 00 | f | (0,10) | {“(0,10)”,”(0,14)”}
10 | (16,8292) | 616 | f | f | 2c 00 00 00 00 00 00 00 | f | (1,3) | {“(1,3)”,”(3,9)”}
11 | (16,8292) | 616 | f | f | 2d 00 00 00 00 00 00 00 | f | (6,28) | {“(6,28)”,”(11,1)”}
12 | (16,8292) | 616 | f | f | 2e 00 00 00 00 00 00 00 | f | (0,27) | {“(0,27)”,”(1,13)”}
13 | (16,8292) | 616 | f | f | 2f 00 00 00 00 00 00 00 | f | (4,17) | {“(4,17)”,”(4,21)”}

Brin function

  • brin_page_type(page bytea) returns text

주어진 brin 인덱스 페이지의 페이지 유형을 반환하거나 페이지가 유효한 brin 페이지가 아니면 오류를 출력합니다.

예)

SELECT brin_page_type(get_raw_page(‘brinidx’, 0));

brin_page_type
———————–
meta

  • brin_metapage_info(page bytea) returns record

brin 인덱스 메타페이지에 대한 다양한 정보를 반환합니다.

예)

SELECT * FROM brin_metapage_info(get_raw_page(‘brinidx’, 0));
magic | version | pagesperrange | lastrevmappage
————+———+—————+—————-
0xA8109CFA | 1 | 4 | 2

  • brin_revmap_data(page bytea) returns setof tid

brin 인덱스 범위 맵 페이지의 튜플 식별자 목록을 반환합니다.

예)

SELECT * FROM brin_revmap_data(get_raw_page(‘brinidx’, 2)) LIMIT 5;

pages

(6,137)
(6,138)
(6,139)
(6,140)
(6,141)

  • brin_page_items(page bytea, index oid) returns setof record

brin 데이터 페이지에 저장된 데이터를 반환합니다.

예)

SELECT * FROM brin_page_items(get_raw_page(‘brinidx’, 5),
‘brinidx’)
ORDER BY blknum, attnum LIMIT 6;
itemoffset | blknum | attnum | allnulls | hasnulls | placeholder | value
————+——–+——–+———-+———-+————-+————–
137 | 0 | 1 | t | f | f |
137 | 0 | 2 | f | f | f | {1 .. 88}
138 | 4 | 1 | t | f | f |
138 | 4 | 2 | f | f | f | {89 .. 176}
139 | 8 | 1 | t | f | f |
139 | 8 | 2 | f | f | f | {177 .. 264}

Gin function

  • gin_metapage_info(page bytea) returns record

GIN 인덱스 메타페이지에 대한 정보를 반환합니다.

예)

SELECT * FROM gin_metapage_info(get_raw_page(‘gin_index’, 0));
-[ RECORD 1 ]—-+———–
pending_head | 4294967295
pending_tail | 4294967295
tail_free_size | 0
n_pending_pages | 0
n_pending_tuples | 0
n_total_pages | 7
n_entry_pages | 6
n_data_pages | 0
n_entries | 693
version | 2

  • gin_page_opaque_info(page bytea) returns record

페이지 유형과 같은 GIN 인덱스 불투명 영역에 대한 정보를 반환합니다.

예)

SELECT * FROM gin_page_opaque_info(get_raw_page(‘gin_index’, 2));
rightlink | maxoff | flags
———–+——–+————————
5 | 0 | {data,leaf,compressed}

  • gin_leafpage_items(page bytea) returns setof record

GIN 리프 페이지에 저장된 데이터에 대한 정보를 반환합니다.

예)

SELECT first_tid, nbytes, tids[0:5] AS some_tids
FROM gin_leafpage_items(get_raw_page(‘gin_test_idx’, 2));
first_tid | nbytes | some_tids
———–+——–+———————————————————-
(8,41) | 244 | {“(8,41)”,”(8,43)”,”(8,44)”,”(8,45)”,”(8,46)”}
(10,45) | 248 | {“(10,45)”,”(10,46)”,”(10,47)”,”(10,48)”,”(10,49)”}
(12,52) | 248 | {“(12,52)”,”(12,53)”,”(12,54)”,”(12,55)”,”(12,56)”}
(14,59) | 320 | {“(14,59)”,”(14,60)”,”(14,61)”,”(14,62)”,”(14,63)”}
(167,16) | 376 | {“(167,16)”,”(167,17)”,”(167,18)”,”(167,19)”,”(167,20)”}
(170,30) | 376 | {“(170,30)”,”(170,31)”,”(170,32)”,”(170,33)”,”(170,34)”}
(173,44) | 197 | {“(173,44)”,”(173,45)”,”(173,46)”,”(173,47)”,”(173,48)”}

Gist function

  • gist_page_opaque_info(page bytea) returns record

NSN, rightlink 및 페이지 유형과 같은 GiST 인덱스 페이지의 불투명 영역에서 정보를 반환합니다.

예)

SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 2));
 lsn | nsn | rightlink | flags
-----+-----+-----------+--------
 0/1 | 0/0 |         1 | {leaf}
  • gist_page_items(page bytea, index_oid regclass) returns setof record

GiST 인덱스의 페이지에 저장된 데이터에 대한 정보를 반환합니다.

예)

SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 0), 'test_gist_idx');
 itemoffset |   ctid    | itemlen | dead |       keys
------------+-----------+---------+------+-------------------
          1 | (1,65535) |      40 | f    | (p)=((166,166))
          2 | (2,65535) |      40 | f    | (p)=((332,332))
          3 | (3,65535) |      40 | f    | (p)=((498,498))
          4 | (4,65535) |      40 | f    | (p)=((664,664))
          5 | (5,65535) |      40 | f    | (p)=((830,830))
          6 | (6,65535) |      40 | f    | (p)=((996,996))
          7 | (7,65535) |      40 | f    | (p)=((1000,1000))
  • gist_page_items_bytea(page bytea) returns setof record

gist_page_items와 같지만 키 데이터를 raw bytea blob으로 반환합니다. 키 디코딩을 시도하지 않기 때문에 어떤 인덱스가 관련되어 있는지 알 필요가 없습니다.

예)

SELECT * FROM gist_page_items_bytea(get_raw_page('test_gist_idx', 0));
 itemoffset |   ctid    | itemlen | dead |                                      key_data
------------+-----------+---------+------+------------------------------------------------------------------------------------
          1 | (1,65535) |      40 | f    | x00000100ffff28000000000000c064400000000000c06440000000000000f03f000000000000f03f
          2 | (2,65535) |      40 | f    | x00000200ffff28000000000000c074400000000000c074400000000000e064400000000000e06440
          3 | (3,65535) |      40 | f    | x00000300ffff28000000000000207f400000000000207f400000000000d074400000000000d07440
          4 | (4,65535) |      40 | f    | x00000400ffff28000000000000c084400000000000c084400000000000307f400000000000307f40
          5 | (5,65535) |      40 | f    | x00000500ffff28000000000000f089400000000000f089400000000000c884400000000000c88440
          6 | (6,65535) |      40 | f    | x00000600ffff28000000000000208f400000000000208f400000000000f889400000000000f88940
          7 | (7,65535) |      40 | f    | x00000700ffff28000000000000408f400000000000408f400000000000288f400000000000288f40

Hash function

  • hash_page_type(page bytea) returns text

주어진 hash 인덱스 페이지의 페이지 유형을 반환합니다.

예)

SELECT hash_page_type(get_raw_page('con_hash_index', 0));
 hash_page_type
----------------
 metapage
  • hash_page_stats(page bytea) returns setof record

hash 인덱스의 버킷 또는 오버플로 페이지에 대한 정보를 반환합니다.

예)

SELECT * FROM hash_page_stats(get_raw_page('con_hash_index', 1));
-[ RECORD 1 ]---+-----------
live_items      | 407
dead_items      | 0
page_size       | 8192
free_size       | 8
hasho_prevblkno | 4096
hasho_nextblkno | 8474
hasho_bucket    | 0
hasho_flag      | 66
hasho_page_id   | 65408
  • hash_page_items(page bytea) returns setof record

hash 인덱스 페이지의 버킷 또는 오버플로 페이지에 저장된 데이터에 대한 정보를 반환합니다.

예)

SELECT * FROM hash_page_items(get_raw_page('con_hash_index', 1)) LIMIT 5;
 itemoffset |   ctid    |    data
------------+-----------+------------
          1 | (899,77)  | 1053474816
          2 | (897,29)  | 1053474816
          3 | (894,207) | 1053474816
          4 | (892,159) | 1053474816
          5 | (890,111) | 1053474816
  • hash_bitmap_info(index oid, blkno bigint) returns record

hash 인덱스의 특정 오버플로 페이지에 대한 비트맵 페이지의 비트 상태를 보여줍니다.

예)

SELECT * FROM hash_bitmap_info('con_hash_index', 2052);
 bitmapblkno | bitmapbit | bitstatus
-------------+-----------+-----------
          65 |         3 | t
  • hash_metapage_info(page bytea) returns record

hash 인덱스의 메타 페이지에 저장된 정보를 반환합니다.

예)

SELECT magic, version, ntuples, ffactor, bsize, bmsize, bmshift, maxbucket, highmask, lowmask, ovflpoint, firstfree, nmaps, procid, regexp_replace(spares::text, ‘(,0)}’, ‘}’) as spares, regexp_replace(mapp::text, ‘(,0)}’, ‘}’) as mapp
FROM hash_metapage_info(get_raw_page(‘con_hash_index’, 0));
-[ RECORD 1 ]——————————————————————————-
magic | 105121344
version | 4
ntuples | 500500
ffactor | 40
bsize | 8152
bmsize | 4096
bmshift | 15
maxbucket | 12512
highmask | 16383
lowmask | 8191
ovflpoint | 28
firstfree | 1204
nmaps | 1
procid | 450
spares | {0,0,0,0,0,0,1,1,1,1,1,1,1,1,3,4,4,4,45,55,58,59,508,567,628,704,1193,1202,1204}
mapp | {65}

참고 사이트

pgstattuple

pgstattuple extension은 튜플 수준 통계를 얻기 위한 다양한 함수를 제공합니다.

제공 함수

  • pgstattuple(regclass or text) returns record

relation의 물리적 길이, dead튜플의 백분율 및 기타 정보를 반환합니다. 사용자가 vacuum이 필요한지 여부를 결정하는데 도움이 될 수 있고, 인수는 대상 관계의 이름, OID, TEXT입니다. return 값은 아래와 같습니다. 이 함수는 read lock만 획득할 수 있고, HeapTupleSatisfiesDirty가 false를 반환하면 dead 튜플이라고 판단합니다.

함수 결과 내용

column유형설명
table_lenbigint물리적 relation 길이(byte)
tuple_countbigintlive 튜플 수
tuple_lenbigintlive 튜플의 총 길이(바이트)
tuple_percentfloat8live 튜플의 백분율
dead_tuple_countbigintdead 튜플의 수
dead_tuple_lenbigintdead 튜플의 총 길이(바이트)
dead_tuple_percentfloat8dead 튜플의 백분율
free_spacebigint총 여유 공간(바이트)
free_percentfloat8여유 공간 비율
  • pgstatindex(regclass or text) returns record

B-트리 인덱스에 대한 정보를 보여주는 레코드를 반환합니다.

함수 결과 내용

column유형설명
versionintegerB-트리 버전
tree_levelintegerroot 페이지의 tree level
index_sizebigint총 인덱스 크기(바이트)
root_block_nobigintroot 페이지의 위치(없으면 0)
internal_pagesbigint“내부” (상위 수준) 페이지 수
leaf_pagesbigintleaf 페이지 수
empty_pagesbigintempty 페이지 수
deleted_pagesbigintdeleted 페이지 수
avg_leaf_densityfloat8leaf 페이지의 평균 밀도
leaf_fragmentationfloat8leaf 페이지 조각화
  • pgstatginindex(regclass) returns record

GIN 인덱스에 대한 정보를 보여주는 레코드를 반환합니다.
함수 결과 내용

column유형설명
versionintegergin 버전 번호
pending_pagesinteger보류 목록의 페이지 수
pending_tuplesbigint보류 목록의 튜플 수
  • pgstathashindex(regclass) returns record

HASH 인덱스에 대한 정보를 보여주는 레코드를 반환합니다.

함수 결과 내용

column유형설명
versioninteger해시 버전 번호
bucket_pagesbigint버킷 페이지 수
overflow_pagesbigint오버플로 페이지 수
bitmap_pagesbigint비트맵 페이지 수
unused_pagesbigint미사용 페이지 수
live_itemsbigint라이브 튜플 수
dead_tuplesbigint죽은 튜플의 수
free_percentfloat여유 공간 비율
  • pg_relpages(regclass or text) returns bigint

relation의 페이지 수를 반환합니다.

  • pgstattuple_approx(regclass) returns record

대략적인 결과를 빠르게 반환하는 함수입니다. pgstattuple은 전체 테이블 스캔을 수행하고 live 및 dead 튜플과 여유 공간의 정확한 수를 반환하는데, pgstattuple_approx는 전체 테이블 스캔을 피하고 근사치로 live 및 dead 튜플과 여유 공간의 통계를 반환합니다(dead 튜플은 정확하게 반환함). 앞서 소개했던 VM(Visibility Map)에 의거하여 페이지를 건너뛰는 방식으로 수행합니다.

함수 결과 내용

column유형설명
table_lenbigint물리적 relation 길이(byte)
scanned_percentfloat8스캔한 테이블의 비율
approx_tuple_countbigintlive 튜플 수
approx_tuple_lenbigintlive 튜플의 총 길이(바이트)
approx_tuple_percentfloat8live 튜플의 백분율
dead_tuple_countbigintdead 튜플의 수
dead_tuple_lenbigintdead 튜플의 총 길이(바이트)
dead_tuple_percentfloat8dead 튜플의 백분율
approx_free_spacebigint총 여유 공간(바이트)
approx_free_percentfloat8여유 공간 비율

예시

pgstattuple 함수 조회 결과

postgres=# SELECT * FROM pgstattuple(‘pg_catalog.pg_proc’);
-[ RECORD 1 ]——+——–
table_len | 1327104
tuple_count | 4219
tuple_len | 1094969
tuple_percent | 82.51
dead_tuple_count | 179
dead_tuple_len | 38275
dead_tuple_percent | 2.88
free_space | 155716
free_percent | 11.73

pgstatindex 함수 조회 결과

SELECT * FROM pgstatindex(‘pg_cast_oid_index’);
-[ RECORD 1 ]——+——
version | 4
tree_level | 0
index_size | 16384
root_block_no | 1
internal_pages | 0
leaf_pages | 1
empty_pages | 0
deleted_pages | 0
avg_leaf_density | 68.74
leaf_fragmentation | 0

pgstatginindex 함수 조회 결과

postgres=# select * from pgstatginindex(‘test_ginidx’);
-[ RECORD 1 ]–+–
version | 2
pending_pages | 0
pending_tuples | 0

pgstathashindex 함수 조회

postgres=# select * from pgstathashindex(‘test_hashidx’);
-[ RECORD 1 ]–+—-
version | 4
bucket_pages | 4
overflow_pages | 0
bitmap_pages | 1
unused_pages | 0
live_items | 0
dead_items | 0
free_percent | 100

pgstattuple_approx 함수 조회

postgres=# SELECT * FROM pgstattuple_approx(‘pg_catalog.pg_proc’::regclass);
-[ RECORD 1 ]——–+——————
table_len | 1335296
scanned_percent | 48
approx_tuple_count | 3429
approx_tuple_len | 1140904
approx_tuple_percent | 85.44202933282209
dead_tuple_count | 179
dead_tuple_len | 38275
dead_tuple_percent | 2.866405650881902
approx_free_space | 142620
approx_free_percent | 10.68077789493865

참고 사이트

지금까지 ‘PostgreSQL Contrib Extensions – Function part2’에 관해 알아보았습니다

‘PostgreSQL Contrib Extensions – view’을 바로 이어서 확인해보세요!

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •