暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pg_get_serial_sequence()函数

原创 Together 2023-04-18
854

返回与列关联的序列名,如果没有与列关联的序列则返回null,第一个输入参数是具有可选模式的表名,第二个参数是列名。因为第一个形参可能是一个schema和table,所以它不被视为双引号标识符,这意味着默认情况下它是小写的,而第二个形参只是一个列名,被视为双引号并保留其大小写。函数返回一个适合传递给序列函数的格式值。可以使用alter sequence owned by 修改或删除改关联

为什么使用pg_get_serial_sequence()会取到空值?

这取决于表是如何创建的,当使用serial时,序列会自动创建并与表关联

pepsidb=# create table my_table_auto(id serial);
CREATE TABLE
pepsidb=#
pepsidb=# select pg_get_serial_sequence('my_table_auto','id');
   pg_get_serial_sequence
-----------------------------
 public.my_table_auto_id_seq
(1 row)
复制

当手动创建一个序列时,它不会与表关联

pepsidb=# create sequence my_sequence;
CREATE SEQUENCE
pepsidb=# create table my_table_manually(id int default nextval('my_sequence'));
CREATE TABLE
pepsidb=# select pg_get_serial_sequence('my_table_manually', 'id');
 pg_get_serial_sequence
------------------------

(1 row)
复制

使用alter sequence sequence_name owned by tablename.column;

pepsidb=# alter sequence my_sequence owned by my_table_manually.id;
ALTER SEQUENCE
pepsidb=# select pg_get_serial_sequence('my_table_manually', 'id');
 pg_get_serial_sequence
------------------------
 public.my_sequence
(1 row)
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论