postgresql 问题更新顺序

mzsu5hc0  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(175)

我想更新RDS Postgres 11中的表的序列。尝试了以下命令,但我没有看到提交到数据库的更改。我甚至使用了commit
我错过了什么?
第一个
select currval('table1_id_seq')会传回6

o7jaxewo

o7jaxewo1#

如果你...
我看不到提交到数据库的更改
...即使您确实提交了事务(并且您连接到了正确的数据库),我也只能看到两种可能的解释。
1.找错人了
在您的问题中,public.table1CREATE TABLE语句中是模式限定的,但在以下任一语句中都不是:

SELECT setval(pg_get_serial_sequence('table1', 'id'), ...
SELECT setval('table1_id_seq', ...

如果在search_path中的'public'之前的另一个模式中有另一个table1,则最终将修改该表的相应序列。
由于Postgres中的出厂默认值是search_path = "$user",public,因此很明显,可疑的是当前角色的“home”模式中存在同名的表。

  • search_path如何影响标识符解析和“当前模式”
    解决方案:

修复搜索路径或模式限定表和序列名。

2.缺少权限

假设您的数据库角色对table1具有SELECT(甚至所有)权限应该是安全的。但是,您需要对底层SEQUENCE具有单独的附加权限,才能在其上运行setval()
但是,您应该会看到缺少权限的错误消息!
请参阅:

GRANT USAGE ON SEQUENCE table1_id_seq TO the_role;  -- your role here

或者使用IDENTITY列而不是serial(Postgres 10+),它隐式继承表的权限。请参见:

  • 自动递增表列
  • 当Postgres的主键序列不同步时,如何重置它?

相关问题