Postgresql
如何生成約束sql?
我正在尋找一種可以
SQL
在選擇約束時生成創建 sql 的方法,例如 PgAdmin 的選項卡。(pg admin是怎麼做的?)我想實現一個通用方法,可以在處理後刪除和重新創建外鍵約束。
Postgresql 具有pg_get_constraintdef函式,用於生成特定約束的創建語句。
這是一個例子;
架構 (PostgreSQL v13)
create table test ( id integer primary key, data integer check (data between 1 and 100) ); create table test2 ( id integer primary key, data integer, test_id integer references test (id) );
查詢 #1
select connamespace::regnamespace "Schema", conrelid::regclass "Table", conname "Constraint", pg_get_constraintdef(oid) "Definition", format ('ALTER TABLE %I.%I ADD CONSTRAINT %I %s;', connamespace::regnamespace, conrelid::regclass, conname, pg_get_constraintdef(oid) ) from pg_constraint where conname IN ( 'test_data_check', 'test_pkey', 'test2_pkey', 'test2_test_id_fkey' );