PostgreSQL: OID 생성

calico·2025년 6월 23일

Database

목록 보기
1/7

PostgreSQL에서 WITHOUT OIDS 옵션은 더 이상 필요하지 않고, 최신 버전에서는 deprecated(사용 중단) 되었습니다.

  • OID란? Object Identifier의 약자로, 예전 PostgreSQL에서는 모든 행(row)에 별도의 ID(OID)를 부여하던 시스템이었음.
    • 현재는? PostgreSQL 12 이상에서 WITHOUT OIDS/WITH OIDS 옵션 자체가 제거되었습니다.
  • 결론 그냥 아래처럼 쓰시면 됩니다.
CREATE TABLE public.EQUIPMENT_CODE (
    ...
);

OID란?


  • OID(Object Identifier)는 PostgreSQL 내부에서 각각의 객체(테이블, 인덱스, 컬럼, 함수, row 등)를 고유하게 식별하기 위해 사용하는 4바이트 정수값입니다.

    • 즉, PostgreSQL 시스템에서 "이 객체는 이 번호!"라고 식별하기 위한 일종의 주민등록번호 같은 값입니다.

OID의 용도


  1. 시스템 카탈로그의 고유 식별자

    • PostgreSQL 내부적으로 테이블, 컬럼, 함수 등 다양한 객체를 관리합니다.

    • 이 객체들을 시스템 테이블(system catalog, 예: pg_class, pg_type, pg_proc 등)에서 OID로 고유하게 식별합니다.

    • 예시: pg_class.oid는 각각의 테이블을, pg_proc.oid는 각각의 함수를 식별합니다.

  2. 과거엔 사용자 테이블의 각 행(row)에도 OID

    • PostgreSQL 예전 버전에서는, 일반 데이터 테이블의 각 행(row)에도 OID가 자동 생성되었습니다.

    • 현재는 기본적으로 비활성화되어 있고, 대부분의 경우 사용되지 않습니다.

  3. Foreign Key처럼 활용 불가

    • OID는 일시적 ID이며, 재활용될 수 있기 때문에 데이터 베이스 레벨에서 영구적인 데이터 관계를 위해 사용하진 않습니다.



OID의 특징 및 주의사항


  • 고유성: 시스템 전체적으로 유일한 숫자입니다(단, 오버플로우되면 중복 가능).

  • 사용자 데이터 열로 추천하지 않음: OID는 내부 식별자일 뿐 데이터의 관계(Primary, Foreign Key) 등에는 사용하지 않습니다.

  • row-level OID는 기본 OFF: 최신 버전에서는 테이블의 각 행마다 OID를 부여하지 않습니다.

  • 시스템 카탈로그에서만 중요: 보통 개발자는 OID 대신 PK나 유니크 키를 사용합니다.



OID 예시


  • 시스템 카탈로그에서 사용 예시
SELECT oid, relname
FROM pg_class
WHERE relname = 'my_table';
  • 이 쿼리는 시스템 테이블에서 특정 테이블의 OID 값을 보여줍니다.



요약


용도설명
내부 식별자PostgreSQL 객체와 시스템 카탈로그에서 사용
과거 row-level OID 지원테이블의 각 row에 OID를 자동 부여했음
현재 row-level OID 비활성화최신 버전에서는 기본적으로 사용되지 않음



OID 자동 생성 기능 끄기


CREATE TABLE my_table (
  id SERIAL PRIMARY KEY,
  name TEXT
) WITH (OIDS = FALSE);

위 구문은 테이블을 생성할 때 행마다 OID를 생성하지 마라는 의미입니다.
즉, 아래 두 구문은 사실상 같은 역할을 합니다.

  • WITH (OIDS = FALSE)

  • WITHOUT OIDS

둘 다 "이 테이블에 OID를 사용하지 마라"는 의미입니다.



PostgreSQL 버전별 동작


과거(9.0 이전)


  • OID가 기본적으로 각 행에 저장됩니다.

  • 명시적으로 OID를 끄고 싶으면 WITH (OIDS = FALSE) 또는 WITHOUT OIDS 옵션 사용.



9.0 ~ 11.1


  • 테이블의 OID 지원이 Deprecated(폐지 예정)입니다.

  • 이 시기부터는 기본값이 OIDS = FALSE입니다.

  • 명시적으로 켜고 싶으면 WITH (OIDS = TRUE) 또는 WITH OIDS 사용(추천X).



12버전 이후(~2024 기준)


  • OIDS 옵션 완전히 제거

    • WITH (OIDS=...) 구문 사용 시 다음과 같은 오류 발생
    ERROR:  unrecognized parameter "oids"



결론 (2024년 PostgreSQL 최신 기준)


  • WITH (OIDS = FALSE)는 더 이상 필요 없으며, 지원되지 않습니다.

  • 사용 시 문법 오류가 납니다.

  • OID가 필요한 특수한 케이스(매우 드물고 옛날 방식)가 아니라면, 신경 쓸 필요 없습니다.



profile
개인 블로그

0개의 댓글