sti*_*bit 88
可以通过 检索约束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>';
Run Code Online (Sandbox Code Playgroud)
替换<schema name>为您的架构<table name>名称和表名称。
Luí*_*usa 30
在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)
Run Code Online (Sandbox Code Playgroud)
这里需要注意的是,您无法通过这种方式获得所有约束的名称。
小智 6
这是 PostgreSQL 的具体答案。它将检索所有列及其关系:
select *FROM (
from (
select
pgc.contype as constraint_type,
ccu.table_schema as table_schema,
kcu.table_name as table_name,
case when (pgc.contype = 'f') then kcu.column_name else ccu.column_name end as column_name,
case when (pgc.contype = 'f') then ccu.table_name else (null) end as reference_table,
case when (pgc.contype = 'f') then ccu.column_name else (null) end as reference_col,
case when (pgc.contype = 'p') then 'yes' else 'no' end as auto_inc,
case when (pgc.contype = 'p') then 'no' else 'yes' end as is_nullable,
'integer' as data_type,
'0' as numeric_scale,
'32' as numeric_precision
from
pg_constraint as pgc
join pg_namespace nsp on nsp.oid = pgc.connamespace
join pg_class cls on pgc.conrelid = cls.oid
join information_schema.key_column_usage kcu on kcu.constraint_name = pgc.conname
left join information_schema.constraint_column_usage ccu on pgc.conname = ccu.constraint_name
and nsp.nspname = ccu.constraint_schema
union
select
null as constraint_type ,
table_schema,
table_name,
column_name,
null as refrence_table,
null as refrence_col,
'no' as auto_inc,
is_nullable,
data_type,
numeric_scale,
numeric_precision
from information_schema.columns cols
where
table_schema = 'public'
and concat(table_name, column_name) not in(
select concat(kcu.table_name, kcu.column_name)
from
pg_constraint as pgc
join pg_namespace nsp on nsp.oid = pgc.connamespace
join pg_class cls on pgc.conrelid = cls.oid
join information_schema.key_column_usage kcu on kcu.constraint_name = pgc.conname
left join information_schema.constraint_column_usage ccu on pgc.conname = ccu.constraint_name
and nsp.nspname = ccu.constraint_schema
)
) as foo
order by table_name asc, column_name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119060 次 |
| 最近记录: |