This article provides a simple script to help the administrator identify constraint level information.
Note: Please verify the script on a test cluster before running it on production.
List of constraints w.r.t table
select c.nspname||'.'||b.relname "Relation Name", a.conname as "Constraint Name", case a.contype when 'p' then 'Primary key' when 'c' then 'Check' when 'f' then 'Foreign Key' end as "Constraint Type" from pg_constraint a , pg_class b , pg_namespace c where a.conrelid=b.oid and c.oid=b.relnamespace;
Details about Primary Key constraints
select b.table_schema ||'.'|| b.table_name as "Relation name", b.constraint_schema ||'.'||b.constraint_name as "Constraint name", b.column_name as "Constraint column", b.ordinal_position as "Column position" from pg_constraint a, information_schema.key_column_usage b where b.constraint_name=a.conname and a.contype='p' order by b.constraint_name, b.ordinal_position;
Details about Foreign Key constraints
select b.table_schema ||'.' || b.table_name as "Relation name", a.constraint_schema ||'.'||a.constraint_name as "Constraint name", b.column_name as "Constraint column", c.table_schema ||'.' || c.table_name as "Foreign table name", c.column_name as "Foreign table column", b.ordinal_position as "Column position" from information_schema.referential_constraints a , information_schema.key_column_usage b , information_schema.key_column_usage c where b.constraint_name = a.constraint_name and c.ordinal_position = b.position_in_unique_constraint and c.constraint_name = a.unique_constraint_name order by a.constraint_name, b.ordinal_position;
Details about Check Key constraints
select c.nspname||'.'||b.relname "Relation Name", a.conname as "Constraint Name", a.consrc as "Constraint Condition" from pg_constraint a , pg_class b , pg_namespace c where a.conrelid=b.oid and c.oid=b.relnamespace and a.contype='c' order by 1,2;
Details about "Not Null" columns
select c.nspname||'.'||b.relname "Relation Name", attname "Column Name" from pg_attribute a , pg_class b , pg_namespace c where c.oid=b.relnamespace and b.oid=a.attrelid and a.attnotnull='t' and a.attstattarget < 0 and c.nspname not in ('pg_toast','pg_catalog','pg_bitmapindex','pg_aoseg','information_schema','gp_toolkit') order by 1,2;
Pivotal Greenplum Database (GPDB) all versions