Object identifer (OIDs) 는 PostgreSQL 에서 내부적으로 다양한 시스템 테이블에서 primary key 로서 사용된다. 이 OID 컬럼은 사용자가 정의한 테이블에도 역시 추가된다. (사용자가 테이블 생성시에 WITHOUT OIDS 라는 구문을 명시하기 전에는 그러하다).
Type oid 는 object identifer 를 줄인 말이다. oid 에는 몇개의 alias type 이 있다.: regproc, regprocedure, regoper, regoperator, regclass, 그리고 regtype이 그들이다. Table 8-19 에 대략적인 설명을 해 두었다.
oid type 은 현재 unsigned four-byte integer로 구현되어 있다. 그러므로, 이들은 큰 데이터베이스 뿐만 아니라, 큰 파일 내에서도 유일성을 보장해주지 못한다. 그러므로, 사용자 정의 테이블 내의 OID 컬럼을 primary key 로 사용하는 것은 권장하지 않는다. OID 는 시스템 테이블에 의해서 참조로서 사용되어 지는 것이 좋다.
oid type 그 자체는 비교를 제외하고는 몇가지 연산을 지원하지 않는다. 그러나 이것은 integer 로 casting 되어 질수 있으며, 그 후에 다양한 정수 연산자를 이용하면 된다. (이렇게 할 경우 signed-대-unsigned 사이에 혼돈할 수 있으니 주의하기 바란다)
OID alias types 은 그 자신을 위한 특화된 입출력 루틴을 제외하고는 어떠한 연산도 지원하지 않는다. 이들 루틴은 type oid 가 사용하는 원래의 수치값 보다는 시스템 object 의 symbolic name 을 출력하고 받아 들일수 있다. Alias types 은 객체를 위한 OID values 을 조회할수 있다: 예를 들면, 사용자들은 mytable 의 OID 를 얻기 위해서 SELECT oid FROM pg_class WHERE relname = 'mytable'. 와 같은 긴 질의를 이용하기 보다는 'mytable'::regclass 와 같이 명시할수 있다. (실제로, 다른 schema 내에서 여러개의 mytable 이라는 동일한 이름을 가지는 테이블이 있을 경우 훨씬 더 복잡한 SELECT 질의를 이용해야 제대로 된 OID 를 얻을수 있다.)
Table 8-19. Object Identifier Types
Name |
References |
Description |
Value Example |
oid |
any |
numeric object identifier |
564182 |
regproc |
pg_proc |
function name |
sum |
regprocedure |
pg_proc |
function with argument types |
sum(int4) |
regoper |
pg_operator |
operator name |
+ |
regoperator |
pg_operator |
operator with argument types |
*(integer,integer) or -(NONE,integer) |
regclass |
pg_class |
relation name |
pg_type |
regtype |
pg_type |
data type name |
integer |
모든 OID alias types 은 schema-qualified names을 받아 들일수 있다. 그리고, 만약 객체가 qualify 되지 않고, 현재의 검색 경로상에서 찾을수 없을 경우, 출력상에 schema-qualified names 을 출력할 수 있다. regproc 와 regoper alias types 은 유일한 입력 명을 받아 들일수 있다.(not overloaded), 그래서 그들은 사용에 제한이 있다.; 대부분의 경우 regprocedure 이나 regoperator 등이 좀더 적절하다. 단항 연산자인 regoperator 는, 사용하지 않는 operand 를 NONE 으로 명시하여 준다.
다른 시스템에서 이용되는 identifier type은 xid, 또는 transaction (약어로 xact를 써준다) identifier 이다. 이것은 system columns인 xmin 와 xmax의 자료형이다. Transaction identifiers 는 32-bit quantities이다.
시스템에 의해 사용되는 세번째 identifier type used by the system cid 또는 command identifier 이다. 이것은 system columns 인 cmin 과 cmax의 자료형이다. Command identifiers 도 역시 32-bit quantities이다.
시스템에 의해 사용되는 마지막 identifier type 은 tid, 또는 tuple identifier (row identifier)이다. 이것은 system column 인 ctid의 자료형이다. 테이블 내에서 row 의 물리적인 위치를 확인시켜 주는, Tuple ID 는 한쌍으로 되어 있다 (block number, tuple index within block)
(System columns 은 Section 5.2 에 좀더 자세하게 설명되어 있다.) |