获取PostgreSQL序列完整元数据的SQL查询需求
获取PostgreSQL序列完整元数据的SQL查询
如果你发现information_schema.sequences视图只能返回部分序列信息,而\d+命令能展示完整的元数据,那直接查询PostgreSQL的系统表就能解决这个问题。information_schema是标准SQL的视图,只包含通用字段,而PostgreSQL本身的系统表pg_sequence存储了序列的全部内部信息,和\d+工具读取的是同一个数据源。
下面是能返回和\d+ phonebook_id_seq完全一致元数据的SQL查询:
SELECT seq.relname AS sequence_name, s.seqlastval AS last_value, s.seqstart AS start_value, s.seqincrement AS increment_by, s.seqmax AS max_value, s.seqmin AS min_value, s.seqcache AS cache_value, s.seqlog AS log_cnt, s.seqcycle AS is_cycled, s.seqcalled AS is_called FROM pg_class seq JOIN pg_sequence s ON seq.oid = s.seqrelid WHERE seq.relname = 'phonebook_id_seq' AND seq.relnamespace = 'public'::regnamespace;
说明:
pg_class表存储了数据库中所有关系(包括序列、表、索引等)的基本信息,我们通过relname匹配序列名,relnamespace指定模式(这里是public)。pg_sequence是专门存储序列元数据的系统表,通过seqrelid和pg_class的oid关联,能拿到log_cnt、is_cycled、is_called这些information_schema.sequences没有的字段。- 执行这个查询后,你会得到和
\d+命令输出完全对应的字段和值,包括你之前缺失的所有信息。
如果需要查询所有序列的完整元数据,只需要去掉WHERE子句中的seq.relname = 'phonebook_id_seq'条件即可。
内容的提问来源于stack exchange,提问作者data_addict




