You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

获取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是专门存储序列元数据的系统表,通过seqrelidpg_classoid关联,能拿到log_cntis_cycledis_called这些information_schema.sequences没有的字段。
  • 执行这个查询后,你会得到和\d+命令输出完全对应的字段和值,包括你之前缺失的所有信息。

如果需要查询所有序列的完整元数据,只需要去掉WHERE子句中的seq.relname = 'phonebook_id_seq'条件即可。

内容的提问来源于stack exchange,提问作者data_addict

火山引擎 最新活动