PostgreSQL数据库测试环境中有多张表没有添加主键约束,只有一个serial的自增字段。现在需要把那些没有主键的表都加上,serial类型的字段为id 。
首先是怎么找到PostgreSQL数据库中哪些表没有主键?我们看下pg_class这个表,里面有个relhaspkey字段,如果为t说明有主键,f即没有主键。例如下面这个sql 。SELECT n.nspname AS "Schema",c.relname AS "Table Name",c.relhaspkey AS "Has PK" FROM
pg_catalog.pg_class c
JOIN
pg_namespace n
ON (
c.relnamespace = n.oid
AND n.nspname NOT IN ('information_schema', 'pg_catalog')
AND c.relkind='r')WHERE c.relhaspkey = 'f'ORDER BY c.relhaspkey, c.relname;
然后就是对这些表增加主键约束。删除和添加主键的sql如下所示:alter table server drop constraint server_pkey ;alter table server add primary key (id) ;
主键添加完成之后可以通过\d查看。zhangnq=# \d server Table "public.server"
Column | Type | Modifiers --------+---------------+--------------------------------------