PostgreSQL에서 테이블의 모든 제약 조건을 나열하는 방법은 무엇입니까?


답변:


33

를 통해 제약 조건을 검색 할 수 있습니다 pg_catalog.pg_constraint.

SELECT con.*
       FROM pg_catalog.pg_constraint con
            INNER JOIN pg_catalog.pg_class rel
                       ON rel.oid = con.conrelid
            INNER JOIN pg_catalog.pg_namespace nsp
                       ON nsp.oid = connamespace
       WHERE nsp.nspname = '<schema name>'
             AND rel.relname = '<table name>';

교체 <schema name>스키마의 이름과 <table name>테이블의 이름으로.


1
공지 사항 pg_catalog.pg_constraint이 포함되어 있지 않습니다 NOT NULL제약.
루이스 드 수사

6

에서 psql커맨드 라인이 정보가 얻어 테이블 시트에 \d+명령. d+또한 테이블에 NOT NULL없는 제약 조건을 알려줍니다 pg_catalog.pg_constraint. 예를 들면 :

# \d+ observations.stream   
                                                  Table "observations.stream"
 Column |       Type        | Collation | Nullable | Default | Storage  | Stats target |                 Description                 
--------+-------------------+-----------+----------+---------+----------+--------------+---------------------------------------------
 id     | integer           |           | not null |         | plain    |              | 
 name   | character varying |           | not null |         | extended |              | This should be a table in the import schema
 min_id | integer           |           | not null |         | plain    |              | 
 about  | character varying |           | not null |         | extended |              | 
Indexes:
    "stream_pkey" PRIMARY KEY, btree (id)
    "stream_name_key" UNIQUE CONSTRAINT, btree (name)
Check constraints:
    "stream_id_check" CHECK (id > 0)
Referenced by:
    TABLE "profile" CONSTRAINT "profile_id_stream_fkey" FOREIGN KEY (id_stream) REFERENCES stream(id)

여기서주의 할 점은이 방법으로 모든 구속 조건의 이름을 얻지 못한다는 것입니다.


게시 된 출력에 제약 조건 이름이 표시됩니다.
ypercubeᵀᴹ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.