윈 토토 디스크립터 영역은 A의 결과를 처리하는보다 정교한 방법입니다select
, fetch
또는 a설명
진술. 윈 토토 디스크립터 영역은 메타 데이터 항목과 함께 한 행의 데이터 데이터를 하나의 데이터 구조로 그룹화합니다. 메타 데이터는 결과 열의 특성을 미리 알 수없는 동적 윈 토토 문을 실행할 때 특히 유용합니다. Postgre윈 토토은 디스크립터 영역을 사용하는 두 가지 방법을 제공합니다 : 명명 된 윈 토토 디스크립터 영역과 C- 구조 윈 토토DAS.
이름 지정된 윈 토토 디스크립터 영역은 전체 설명자에 관한 정보와 하나 이상의 항목 디스크립터 영역을 포함하는 헤더로 구성되어 있으며, 기본적으로 각각 결과 행에서 하나의 열을 설명합니다..
윈 토토 디스크립터 영역을 사용하기 전에 하나를 할당해야합니다.
exec 윈 토토 할당 디스크립터식별자
;
식별자는 역할을합니다.“변수 이름”설명 자 영역. 더 이상 디스크립터가 필요하지 않은 경우 다음을 처리해야합니다.
Exec 윈 토토 Dalloce Descriptor식별자
;
디스크립터 영역을 사용하려면의 스토리지 대상으로 지정하십시오.in
조항, 호스트 변수를 나열하는 대신 :
Exec 윈 토토 Fetch 다음에 MyCursor에서 윈 토토 디스크립터 MyDesc;
결과 세트가 비어 있으면 디스크립터 영역은 여전히 쿼리의 메타 데이터, 즉 필드 이름입니다..
아직 실행되지 않은 쿼리에 대해설명
명령문은 결과 세트의 메타 데이터를 얻는 데 사용될 수 있습니다.
Exec 윈 토토 시작 선언 섹션; char * sql_stmt = "select * from table1"; Exec 윈 토토 END DELLARE SECTION; Exec 윈 토토 STMT1 준비 : 윈 토토_STMT; Exec 윈 토토 STMT1을 윈 토토 디스크립터 MyDesc에 설명합니다.
postgresql 9.0 이전,윈 토토
키워드는 선택 사항이므로 사용디스크립터
and윈 토토 디스크립터
명명 된 윈 토토 디스크립터 영역을 생산합니다. 이제 그것은 필수입니다.윈 토토
키워드 생성 윈 토토DA 디스크립터 영역, 참조섹션 34.7.2.
in설명
andFetch
진술,in
and사용
키워드는 비슷하게 사용될 수 있습니다 : 디스크립터 영역에서 결과 세트와 메타 데이터를 생성합니다.
이제 디스크립터 영역에서 데이터를 어떻게 꺼내나요? 디스크립터 영역을 필드 명명 된 구조로 생각할 수 있습니다. 헤더에서 필드 값을 검색하고 호스트 변수에 저장하려면 다음 명령을 사용하십시오..
Exec 윈 토토 Get Destriptor이름
:hostvar
=필드
;
현재, 헤더 필드는 하나뿐입니다.count
, 이는 얼마나 많은 품목 디스크립터 영역이 존재하는지 알려줍니다 (즉, 결과에 몇 개의 열이 포함되어 있는지). 호스트 변수는 정수 유형이어야합니다. 항목 설명 자 영역에서 필드를 얻으려면 다음 명령을 사용하십시오.
Exec 윈 토토 Get Destcriptor이름
valueNum
:hostvar
=필드
;
Num
는 문자 그대로의 정수 또는 정수를 포함하는 호스트 변수 일 수 있습니다. 가능한 필드는 다음과 같습니다.
추기경
(정수) #결과 세트의 행 수
데이터
#실제 데이터 항목 (따라서이 필드의 데이터 유형은 쿼리에 따라 다름)
dateTime_interVal_code
(정수) #언제타입
is9
, dateTime_interVal_code
값은입니다.1
for날짜
, 2
forTime
, 3
for타임 스탬프
, 4
for시간대가있는 시간
또는5
for시간대가있는 타임 스탬프
.
DateTime_interVal_Precision
(정수) #구현되지 않음
표시기
(정수) #표시기 (널 값 또는 값 자르기를 나타내는)
key_member
(정수) #구현되지 않음
길이
(정수) #캐릭터의 데이텀 길이
이름
(String) #열 이름
nullable
(정수) #구현되지 않음
Octet_length
(정수) #바이트에서 데이텀의 문자 표현 길이
정밀
(정수) #정밀도 (유형숫자
)
returned_length
(정수) #캐릭터의 데이텀 길이
returned_octet_length
(정수) #바이트에서 데이텀의 문자 표현 길이
스케일
(정수) #스케일 (유형숫자
)
Type
(정수) #열의 데이터 유형의 숫자 코드
inexecute
, 선언
andOpen
진술,의 효과in
and사용
키워드가 다릅니다. 디스크립터 영역은 쿼리 또는 커서의 입력 매개 변수를 제공하기 위해 수동으로 제작할 수 있습니다.윈 토토 디스크립터 사용
입력 매개 변수를 매개 변수화 쿼리로 전달하는 방법입니다. 이름이 지정된 윈 토토 디스크립터 영역을 구축하려는 진술은 다음과 같습니다.이름
Exec 윈 토토 Set Descriptor이름
valueNum
필드
= :hostvar
;
Postgre윈 토토은 하나의 레코드를 하나씩 검색하는 것을 지원합니다fetch
명령문 및이 경우 호스트 변수에 데이터를 저장하면 변수가 배열이라고 가정합니다. 예 :
Exec 윈 토토 시작 선언 섹션; int id [5]; Exec 윈 토토 END DELLARE SECTION; Exec 윈 토토 Fetch 5 MyCursor에서 윈 토토 디스크립터 MyDesc로 향합니다. Exec 윈 토토 GET DESCRICTOR MYDESC 값 1 : ID = DATA;
윈 토토DA 디스크립터 영역은 쿼리의 결과 세트와 메타 데이터를 얻는 데 사용할 수있는 C 언어 구조입니다. 하나의 구조는 결과 세트에서 한 레코드를 저장합니다.
exec sql 포함 sqlda.h; sqlda_t *mysqlda; MyCursor에서 디스크립터 My윈 토토DA로의 Exec 윈 토토 Fetch 3;
윈 토토
키워드가 생략되었습니다. 의 사용 사례에 대한 단락in
및사용
키워드섹션 34.7.1추가로 여기에 적용하십시오. 에서설명
진술디스크립터
키워드를 완전히 생략 할 수 있습니다in
키워드가 사용됩니다 :
exec 윈 토토 repection_statement indeqlda;
윈 토토DA를 사용하는 프로그램의 일반적인 흐름은 다음과 같습니다.
쿼리 준비를하고 커서를 선언합니다.
결과 행에 대한 윈 토토DA를 선언합니다.
입력 매개 변수에 대한 윈 토토DA를 선언하고 초기화 (메모리 할당, 매개 변수 설정)..
입력 윈 토토DA로 커서를 엽니 다.
커서에서 행을 가져 와서 출력 윈 토토DA에 저장합니다.
출력 윈 토토DA에서 호스트 변수로 값을 읽습니다 (필요한 경우 변환)
커서를 닫습니다.
입력 윈 토토DA에 할당 된 메모리 영역을 제거합니다.
윈 토토DA는 세 가지 데이터 구조 유형을 사용합니다.윈 토토DA_T
, 윈 토토VAR_T
및struct 윈 토토name
.
Postgre윈 토토의 윈 토토DA는 IBM DB2 범용 데이터베이스와 유사한 데이터 구조를 가지고 있으므로 DB2의 윈 토토DA에 대한 일부 기술 정보는 Postgre윈 토토의 더 나은 이해에 도움이 될 수 있습니다..
구조 유형윈 토토DA_T
는 실제 윈 토토DA의 유형입니다. 하나의 레코드를 보유하고 있습니다. 그리고 둘 이상의윈 토토DA_T
구조는 링크 된 목록에 포인터와 연결된 목록에 연결할 수 있습니다desc_next
필드, 따라서 순서대로 행하는 행을 나타냅니다. 따라서 두 개 이상의 행을 가져 오면 응용 프로그램은를 따라 읽을 수 있습니다.desc_next
각각의 포인터윈 토토DA_T
노드.
정의윈 토토DA_T
IS :
struct sqlda_struct char sqldaid [8]; 긴 sqldabc; 짧은 sqln; 짧은 윈 토토D; struct sqlda_struct *desc_next; struct 윈 토토var_struct 윈 토토var [1]; ; typedef struct sqlda_struct sqlda_t;
필드의 의미는 다음과 같습니다.
윈 토토DAID
#문자 그대로 문자열이 포함되어 있습니다"윈 토토DA"
.
윈 토토DABC
#할당 된 공간의 크기가 바이트의 크기를 포함합니다.
윈 토토N
#전달 된 경우 매개 변수화 된 쿼리의 입력 매개 변수 수가 포함되어 있습니다.Open
, 선언
또는execute
사용
키워드. 의 출력으로 사용되는 경우select
, execute
또는fetch
진술, 그 값은와 동일합니다윈 토토D
성명서
윈 토토D
#결과 세트에 필드 수가 포함되어 있습니다.
desc_next
#쿼리가 둘 이상의 레코드를 반환하면 여러 개의 연결된 윈 토토DA 구조가 반환되고desc_next
목록의 다음 항목에 대한 포인터를 보유합니다.
윈 토토VAR
#결과 세트의 열의 배열입니다.
구조 유형윈 토토VAR_T
유형 및 길이와 같은 열 값과 메타 데이터를 보유합니다. 유형의 정의는 다음과 같습니다.
struct 윈 토토var_struct 짧은 sqltype; 짧은 sqllen; char *sqldata; 짧은 *sqlind; struct 윈 토토name 윈 토토name; ; typedef struct 윈 토토var_struct 윈 토토var_t;
필드의 의미는 다음과 같습니다.
윈 토토DA를 통해 설정된 쿼리 결과를 검색하는 일반 단계는 다음과 같습니다.
선언윈 토토DA_T
결과 세트를 수신 할 구조.
executefetch
/execute
/설명
선언 된 윈 토토DA를 지정하는 쿼리를 처리하는 명령.
살펴보기로 설정된 결과의 레코드 수 확인윈 토토N
, 회원윈 토토DA_T
구조.
각 열의 값을 얻으십시오윈 토토VAR [0]
, 윈 토토VAR [1]
등,윈 토토DA_T
구조.
다음 행으로 이동 (윈 토토DA_T
구조) 다음에 따른desc_next
포인터,윈 토토DA_T
구조.
필요한대로 위에서 반복하십시오.
윈 토토DA를 통해 세트를 검색하는 예입니다.
먼저, a 선언윈 토토DA_T
결과 세트를 수신 할 구조.
윈 토토DA_T *윈 토토DA1;
다음, 명령에 윈 토토DA를 지정하십시오. 이것은입니다.Fetch
명령 예.
exec 윈 토토 exect sql exect cur1에서 디스크립터 sqlda1;
링크 된 목록을 따라 루프를 실행하여 행을 검색합니다.
sqlda_t *cur_sqlda; for (cur_sqlda = sqlda1; cur_sqlda! = null; cur_sqlda = cur_sqlda- desc_next) ...
루프 내부에서 다른 루프를 실행하여 각 열 데이터를 검색합니다 (윈 토토var_t
구조) 행의 구조.
for (i = 0; i <cur_sqlda- sqld; i ++) 윈 토토var_t v = cur_sqlda- 윈 토토var [i]; char *sqldata = v.sqldata; 짧은 sqllen = v.sqllen; ...
열 값을 얻으려면를 확인하십시오.윈 토토TYPE
값,윈 토토VAR_T
구조. 그런 다음 열 유형에 따라 적절한 방법으로 전환하여에서 데이터를 복사하십시오.윈 토토VAR
호스트 변수에 필드
char var_buf [1024]; 스위치 (v.윈 토토type) CASE ECPGT_CHAR : memset (& var_buf, 0, sizeof (var_buf)); memcpy (& var_buf, sqldata, (sizeof (var_buf) <= sqllen? sizeof (var_buf) -1 : sqllen)); 부서지다; case ecpgt_int : / * 정수 * / memcpy (& intval, sqldata, sqllen); snprintf (var_buf, sizeof (var_buf), "%d", intval); 부서지다; ...
윈 토토DA를 사용하여 입력 매개 변수를 준비된 쿼리로 전달하는 일반 단계는 다음과 같습니다.
준비된 쿼리 생성 (준비 문)
윈 토토DA_T 구조를 입력 윈 토토DA로 선언합니다.
입력 윈 토토DA에 대한 메모리 영역 (윈 토토DA_T 구조) 할당.
할당 된 메모리의 입력 값을 설정 (복사).
입력 윈 토토DA를 지정하여 커서를 엽니 다.
여기 예입니다.
먼저 준비된 진술을 만듭니다.
Exec 윈 토토 시작 선언 섹션; char query [1024] = "pg_database d, pg_stat_database s에서 d.oid = s.datid 및 (d.datname =? 또는 d.oid =?)"; Exec 윈 토토 END DELLARE SECTION; EXEC 윈 토토 STMT1 준비 : 쿼리;
다음, 윈 토토DA에 대한 메모리를 할당하고 입력 매개 변수 수를 설정합니다윈 토토N
,의 멤버 변수윈 토토DA_T
구조. 준비된 쿼리에 둘 이상의 입력 매개 변수가 필요한 경우, 응용 프로그램은 (nr. of params -1) * sizeof (윈 토토var_t)에 의해 계산되는 추가 메모리 공간을 할당해야합니다. 여기에 표시된 예제는 두 개의 입력 매개 변수에 대한 메모리 공간을 할당합니다.
윈 토토DA_T *윈 토토DA2; sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (윈 토토var_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (윈 토토var_t)); sqlda2- sqln = 2; / * 입력 변수 수 */
메모리 할당 후 매개 변수 값을에 저장하십시오.윈 토토var []
배열. (이것은 윈 토토DA가 결과 세트를 수신 할 때 열 값을 검색하는 데 사용되는 것과 동일합니다.)이 예에서는 입력 매개 변수가입니다."Postgres"
, 문자열 유형이 있고1
, 정수 유형이 있습니다.
sqlda2- 윈 토토var [0] .sqltype = ecpgt_char; sqlda2- 윈 토토var [0] .sqldata = "postgres"; sqlda2- 윈 토토var [0] .sqllen = 8; int intval = 1; sqlda2- 윈 토토var [1] .sqltype = ecpgt_int; sqlda2- 윈 토토var [1] .sqldata = (char *) & intval; sqlda2- 윈 토토var [1] .sqllen = sizeof (intval);
커서를 열고 미리 설정된 윈 토토DA를 지정하여 입력 매개 변수가 준비된 명령문으로 전달됩니다..
exec sql descriptor sqlda2를 사용하여 CUR1 OPEN CUR1;
마지막으로, 입력 윈 토토DA를 사용한 후에 할당 된 메모리 공간은 쿼리 결과를 수신하는 데 사용되는 윈 토토DA와 달리 명시 적으로 자유롭게 해제되어야합니다..
free (윈 토토da2);
여기 시스템 카탈로그에서 입력 매개 변수로 지정된 데이터베이스의 액세스 통계를 가져 오는 방법을 설명하는 예제 프로그램이 있습니다..
이 응용 프로그램은 데이터베이스 OID의 PG_DATABASE 및 PG_STAT_DATABASE의 두 시스템 테이블에 합류하며 두 입력 매개 변수 (데이터베이스에 의해 검색되는 데이터베이스 통계를 가져오고 표시합니다.Postgres
및 OID1
).
먼저 입력에 대한 윈 토토DA를 선언하고 출력을위한 윈 토토DA를 선언합니다.
exec sql 포함 sqlda.h; sqlda_t *sqlda1; / * 출력 설명 자 */ sqlda_t *sqlda2; / * 입력 설명 자 */
다음으로, 다음, 데이터베이스에 연결하고, 진술을 준비하고, 준비된 진술에 대한 커서를 선언합니다.
int 메인 (void) Exec 윈 토토 시작 선언 섹션; char query [1024] = "pg_database d, pg_stat_database s에서 d.oid = s.datid 및 (d.datname =? 또는 d.oid =?)"; Exec 윈 토토 END DELLARE SECTION; EXEC 윈 토토 TestDB에 CON1 사용자 테스트를 사용합니다. Exec 윈 토토 선택 PG_CATALOG.SET_CONFIG ( 'search_Path', '', False); Exec 윈 토토 커밋; Exec 윈 토토 STMT1 준비 : 쿼리; EXEC 윈 토토 STMT1에 대한 CUR1 커서 선언;
다음, 입력 매개 변수에 대한 입력 윈 토토DA에 값을 넣으십시오. 입력 윈 토토DA에 대한 메모리를 할당하고 입력 매개 변수 수를로 설정하십시오.윈 토토N
. 상점 유형, 값 및 가치 길이로윈 토토TYPE
, 윈 토토DATA
및윈 토토len
in윈 토토var
구조.
/* 입력 매개 변수에 대한 윈 토토DA 구조를 만듭니다. */ sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (윈 토토var_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (윈 토토var_t)); sqlda2- sqln = 2; / * 입력 변수 수 */ sqlda2- 윈 토토var [0] .sqltype = ecpgt_char; sqlda2- 윈 토토var [0] .sqldata = "postgres"; sqlda2- 윈 토토var [0] .sqllen = 8; intval = 1; sqlda2- 윈 토토var [1] .sqltype = ecpgt_int; sqlda2- 윈 토토var [1] .sqldata = (char *) & intval; sqlda2- 윈 토토var [1] .sqllen = sizeof (intval);
입력 윈 토토DA를 설정 한 후 입력 윈 토토DA로 커서를 엽니 다.
/* 입력 매개 변수가있는 커서를 엽니 다. */ 디스크립터 sqlda2;를 사용하여 Exec 윈 토토 Open CUR1
열린 커서에서 출력 윈 토토DA로 행을 가져옵니다. (일반적으로 전화해야Fetch
루프에서 반복적으로 결과 세트에서 모든 행을 가져 오려면)
while (1) sqlda_t *cur_sqlda; / * 디스크립터 할당 커서 */ exec 윈 토토이 CUR1에서 디스크립터 윈 토토DA1로 가져옵니다.
다음, 링크 된 링크 목록을 따라 윈 토토DA에서 가져온 레코드를 검색합니다윈 토토DA_T
구조.
for (cur_sqlda = sqlda1; cur_sqlda! = null; cur_sqlda = cur_sqlda- desc_next) ...
첫 번째 레코드에서 각 열을 읽으십시오. 열 수는에 저장됩니다.윈 토토D
, 첫 번째 열의 실제 데이터는에 저장됩니다.윈 토토VAR [0]
, 두 멤버윈 토토DA_T
구조.
/* 모든 열을 연속으로 인쇄하십시오. */ for (i = 0; i <sqlda1- sqld; i ++) 윈 토토var_t v = sqlda1- 윈 토토var [i]; char *sqldata = v.sqldata; 짧은 sqllen = v.sqllen; strncpy (name_buf, v.윈 토토name.data, v.윈 토토name.length); name_buf [v.윈 토토name.length] = '\ 0';
이제 열 데이터가 변수에 저장됩니다V
. 모든 데이텀을 호스트 변수로 복사하여v.윈 토토type
열의 유형의 경우
스위치 (v.윈 토토type) int intval; 더블 볼; 서명되지 않은 긴 긴 int longlongval; CASE ECPGT_CHAR : memset (& var_buf, 0, sizeof (var_buf)); memcpy (& var_buf, sqldata, (sizeof (var_buf) <= sqllen? sizeof (var_buf) -1 : sqllen)); 부서지다; case ecpgt_int : / * 정수 * / memcpy (& intval, sqldata, sqllen); snprintf (var_buf, sizeof (var_buf), "%d", intval); 부서지다; ... 기본: ... printf ( " %s = %s (유형 : %d) \ n", name_buf, var_buf, v.윈 토토type);
모든 레코드를 처리 한 후 커서를 닫고 데이터베이스와 연결을 끊습니다.
Exec 윈 토토 COR1; Exec 윈 토토 커밋; EXEC 윈 토토 모든 분리;
전체 프로그램이에 표시됩니다.예 34.1.
예 34.1. 예제 윈 토토DA 프로그램
#include <stdlib.h #include <string.h #include <stdlib.h #include <stdio.h #include <unistd.h exec sql은 sqlda.h; sqlda_t *sqlda1; / * 출력에 대한 설명자 */ sqlda_t *sqlda2; / * 입력에 대한 설명자 */ 찾을 수 없을 때마다 Exec 윈 토토이 중단됩니다. 윈 토토ERROR가 중지 될 때마다 윈 토토 EXEC; int 메인 (void) Exec 윈 토토 시작 선언 섹션; char query [1024] = "pg_database d, pg_stat_database s에서 d.oid = s.datid 및 (d.datname =? 또는 d.oid =?)"; int intval; 서명되지 않은 긴 긴 int longlongval; Exec 윈 토토 END DELLARE SECTION; EXEC 윈 토토 CON1 사용자 가동 시간으로 UptimedB에 연결합니다. Exec 윈 토토 선택 PG_CATALOG.SET_CONFIG ( 'search_Path', '', False); Exec 윈 토토 커밋; Exec 윈 토토 STMT1 준비 : 쿼리; STMT1에 대한 EXEC 윈 토토 선언 CUR1 커서; / * 입력 매개 변수에 대한 윈 토토DA 구조 생성 */ sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (윈 토토var_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (윈 토토var_t)); sqlda2- sqln = 2; / * 여러 입력 변수 */ sqlda2- 윈 토토var [0] .sqltype = ecpgt_char; sqlda2- 윈 토토var [0] .sqldata = "postgres"; sqlda2- 윈 토토var [0] .sqllen = 8; intval = 1; sqlda2- 윈 토토var [1] .sqltype = ecpgt_int; sqlda2- 윈 토토var [1] .sqldata = (char *) & intval; sqlda2- 윈 토토var [1] .sqllen = sizeof (intval); /* 입력 매개 변수가있는 커서를 엽니 다. */ 디스크립터 윈 토토DA2를 사용하여 EXEC 윈 토토 OPEN CUR1; 동안 (1) sqlda_t *cur_sqlda; / * 디스크립터 할당 커서 */ exec 윈 토토은 다음에 cur1에서 디스크립터 sqlda1로 가져옵니다. for (cur_sqlda = sqlda1; cur_sqlda! = null; cur_sqlda = cur_sqlda- desc_next) int i; char name_buf [1024]; char var_buf [1024]; /* 모든 열을 연속으로 인쇄합니다. */ for (i = 0; i <cur_sqlda- sqld; i ++) 윈 토토var_t v = cur_sqlda- 윈 토토var [i]; char *sqldata = v.sqldata; 짧은 sqllen = v.sqllen; strncpy (name_buf, v.윈 토토name.data, v.윈 토토name.length); name_buf [v.윈 토토name.length] = '\ 0'; 스위치 (v.윈 토토type) CASE ECPGT_CHAR : memset (& var_buf, 0, sizeof (var_buf)); memcpy (& var_buf, sqldata, (sizeof (var_buf) <= sqllen? sizeof (var_buf) -1 : sqllen)); 부서지다; case ecpgt_int : / * 정수 * / memcpy (& intval, sqldata, sqllen); snprintf (var_buf, sizeof (var_buf), "%d", intval); 부서지다; CASE ECPGT_LONG_LONG : / * BIGINT * / memcpy (& longlongval, sqldata, sqllen); snprintf (var_buf, sizeof (var_buf), "%lld", longlongval); 부서지다; 기본: int i; memset (var_buf, 0, sizeof (var_buf)); for (i = 0; i <sqllen; i ++) char tmpbuf [16]; snprintf (tmpbuf, sizeof (tmpbuf), "%02x", (서명 된 char) sqldata [i]); strncat (var_buf, tmpbuf, sizeof (var_buf)); 부서지다; printf ( " %s = %s (유형 : %d) \ n", name_buf, var_buf, v.윈 토토type); printf ( "\ n"); Exec 윈 토토 COR1; Exec 윈 토토 커밋; Exec 윈 토토 모든 분리; 반환 0;
이 예제의 출력은 다음과 같은 것으로 보일 것입니다 (일부 숫자는 다릅니다).
OID = 1 (유형 : 1) datname = template1 (유형 : 1) datdba = 10 (유형 : 1) 인코딩 = 0 (유형 : 5) datistemplate = t (유형 : 1) datallowconn = t (유형 : 1) dathasloginevt = f (유형 : 1) datconnlimit = -1 (유형 : 5) datfrozenxid = 379 (유형 : 1) dattablespace = 1663 (유형 : 1) datconfig = (유형 : 1) dataCl = = c/Upime, Uptime = CTC/Uptime (유형 : 1) datid = 1 (유형 : 1) datname = template1 (유형 : 1) Numbackends = 0 (유형 : 5) xact_commit = 113606 (유형 : 9) xact_rollback = 0 (유형 : 9) blks_read = 130 (유형 : 9) blks_hit = 7341714 (유형 : 9) tup_returned = 38262679 (유형 : 9) tup_fetched = 1836281 (유형 : 9) tup_inserted = 0 (유형 : 9) tup_updated = 0 (유형 : 9) tup_deleted = 0 (유형 : 9) OID = 11511 (유형 : 1) datname = postgres (유형 : 1) datdba = 10 (유형 : 1) 인코딩 = 0 (유형 : 5) datistemplate = f (유형 : 1) datallowconn = t (유형 : 1) dathasloginevt = f (유형 : 1) datconnlimit = -1 (유형 : 5) datfrozenxid = 379 (유형 : 1) dattablespace = 1663 (유형 : 1) datconfig = (유형 : 1) dataCl = (유형 : 1) datid = 11511 (유형 : 1) datname = postgres (유형 : 1) Numbackends = 0 (유형 : 5) xact_commit = 221069 (유형 : 9) xact_rollback = 18 (유형 : 9) blks_read = 1176 (유형 : 9) blks_hit = 13943750 (유형 : 9) tup_returned = 77410091 (유형 : 9) tup_fetched = 3253694 (유형 : 9) tup_inserted = 0 (유형 : 9) tup_updated = 0 (유형 : 9) tup_deleted = 0 (유형 : 9)