cda*_*ndr 0 postgresql constraint scripting
我正在寻找一种可以生成创建 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)
);
Run Code Online (Sandbox Code Playgroud)
查询#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'
);
Run Code Online (Sandbox Code Playgroud)
| 模式 | 桌子 | 约束 | 定义 | 格式 |
|---|---|---|---|---|
| 民众 | 测试 | 测试数据检查 | 检查 (((数据 >= 1) AND (数据 <= 100))) | 更改表 public.test 添加约束 test_data_check CHECK (((data >= 1) AND (data <= 100))); |
| 民众 | 测试 | 测试密钥 | 主键(id) | 更改表 public.test 添加约束 test_pkey 主键(id); |
| 民众 | 测试2 | test2_pkey | 主键(id) | 更改表 public.test2 添加约束 test2_pkey 主键(id); |
| 民众 | 测试2 | test2_test_id_fkey | 外键(test_id)参考测试(id) | 更改表 public.test2 添加约束 test2_test_id_fkey 外键 (test_id) 引用 test(id); |
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |