当我们知道序列名称,我们想获取是哪个表或者表上的哪个列在使用这个序列,目前在PG里并没有元命令可以直接查询,pg_class或者pg_sequence系统表也没有记录。
可以使用下面的语句进行查询
select ts.nspname as object_schema, tbl.relname as table_name, col.attname as column_name, s.relname as sequence_name from pg_class s join pg_namespace sn on sn.oid = s.relnamespace join pg_depend d on d.refobjid = s.oid and d.refclassid='pg_class'::regclass join pg_attrdef ad on ad.oid = d.objid and d.classid = 'pg_attrdef'::regclass join pg_attribute col on col.attrelid = ad.adrelid and col.attnum = ad.adnum join pg_class tbl on tbl.oid = ad.adrelid join pg_namespace ts on ts.oid = tbl.relnamespace where s.relkind = 'S' -- and s.relname = 'sequence_name' and d.deptype in ('a', 'n');
复制
另外我们也可以借助.psqlrc文件封装快捷命令来进行调用
.psqlrc文件内容格式
\set short_command 'SQL; '
复制
封装不带参数的快捷命令get_table_name_by_seq
下面需要注意一下SQL里面如果有字符串常量需要双写单引号。或者使用单引号前面加转移字符“\”,也可以使用一对双“$”符号进行包裹。
\set get_table_name_by_seq 'select ts.nspname as object_schema,tbl.relname as table_name, col.attname as column_name,s.relname as sequence_name from pg_class s join pg_namespace sn on sn.oid = s.relnamespace join pg_depend d on d.refobjid = s.oid and d.refclassid=''pg_class''::regclass join pg_attrdef ad on ad.oid = d.objid and d.classid = ''pg_attrdef''::regclass join pg_attribute col on col.attrelid = ad.adrelid and col.attnum = ad.adnum join pg_class tbl on tbl.oid = ad.adrelid join pg_namespace ts on ts.oid = tbl.relnamespace where s.relkind = ''S'' and d.deptype in (''a'', ''n'');'
复制
将上面的内容编辑保存到.psqlrc文件后重新使用psql工具连接测试
:get_table_name_by_seq
复制
可以看到查出了所有的序列与表列之间的信息。
接下来我们根据某个序列名来查询。
封装带参数的快捷命令get_table_name_by_seqname
注意下面SQL里面传字符串参数需要使用冒号,另外参数名称前后需要使用三个单引号或者前后加’
\set get_table_name_by_seqname 'select ts.nspname as object_schema,tbl.relname as table_name, col.attname as column_name,s.relname as sequence_name from pg_class s join pg_namespace sn on sn.oid = s.relnamespace join pg_depend d on d.refobjid = s.oid and d.refclassid=''pg_class''::regclass join pg_attrdef ad on ad.oid = d.objid and d.classid = ''pg_attrdef''::regclass join pg_attribute col on col.attrelid = ad.adrelid and col.attnum = ad.adnum join pg_class tbl on tbl.oid = ad.adrelid join pg_namespace ts on ts.oid = tbl.relnamespace where s.relkind = ''S'' and d.deptype in (''a'', ''n'') and s.relname = :'''v_seqname''' ; '
复制
将上面的内容编辑保存到.psqlrc文件后重新使用psql工具连接测试
我们先需要设置变量参数值
\set v_seqname t_id_seq
复制
然后调用快捷命令
:get_table_name_by_seqname
复制
保持联系
从2019年12月开始写第一篇文章,分享的初心一直在坚持,本人现在组建了一个PG乐知乐享交流群,欢迎关注我文章的小伙伴进群吹牛唠嗑,交流技术,互赞文章。
如果群二维码失效可以加我微信。
最后修改时间:2022-10-23 10:31:11
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
2087次阅读
2025-04-21 16:58:09
QPlus V6.3 更新,新增PostgreSQL与PolarDB PG支持,OceanBase 容灾管理重磅上线
沃趣科技
267次阅读
2025-05-13 09:39:27
4月“墨力原创作者计划”获奖名单公布!
墨天轮编辑部
219次阅读
2025-05-13 16:21:59
中国PostgreSQL培训认证体系新增PGAI应用工程师方向
开源软件联盟PostgreSQL分会
197次阅读
2025-05-06 10:21:13
华象新闻 | PostgreSQL 18 Beta 1、17.5、16.9、15.13、14.18、13.21 发布
严少安
174次阅读
2025-05-09 11:34:10
PG生态赢得资本市场青睐:Databricks收购Neon,Supabase融资两亿美元,微软财报点名PG
老冯云数
172次阅读
2025-05-07 10:06:22
SQL 优化之 OR 子句改写
xiongcc
152次阅读
2025-04-21 00:08:06
告别老旧mysql_fdw,升级正当时
NickYoung
128次阅读
2025-04-29 11:15:18
PostgreSQL中文社区亮相于第八届数字中国峰会
PostgreSQL中文社区
121次阅读
2025-05-07 10:06:20
PostgreSQL的dblink扩展模块使用方法
szrsu
117次阅读
2025-04-24 17:39:30