如何确定是否将列定义为串行数据类型而不是基于目录的整数?
因此,我目前正在创建一些SQL来阅读postgres(9.1)目录以构建表定义。但是,我遇到了SERIAL / BIGSERIAL数据类型的问题。 例: CREATE TABLE cruft.temp ( id BIGSERIAL PRIMARY KEY ); SELECT * FROM information_schema.columns WHERE table_schema='cruft' AND table_name='temp'; "db","cruft","temp","id",1,"nextval('cruft.temp_id_seq'::regclass)","NO","bigint",,,64,2,0,,,,,,,,,,,,,"db","pg_catalog","int8",,,,,"1","NO","NO",,,,,,,"NEVER",,"YES" 它提供了数据库名称(db),模式名称(cruft),表名称(temp),列名称(id),默认值(nextval(...))和数据类型(bigint和int8 .. NOT bigserial)。 ...我意识到我可以检查默认值是否为序列-但我不认为这是100%准确的,因为我可以手动创建一个序列并创建一个默认值是那个顺序。 有人对我如何做到这一点有建议吗?除了检查nextval(* _ seq)的默认值之外,没有其他功能吗? 针对TL; DR或不熟悉pg_catalog的新用户在此处添加的SQL解决方案进行了编辑: with sequences as ( select oid, relname as sequencename from pg_class where relkind = 'S' ) select sch.nspname …