postgresql的nextval引发错误"relation does not exist"

7

I have the following sql:

 INSERT INTO in_api_settings ( 
   ENTITY_ID, 
   ACTIVE_START_DATE, 
   ACTIVE_END_DATE) 
 VALUES ( 
   nextval('in_api_settings_seq'), 
   current_date, 
   null)

当我执行它时,出现错误

错误:关系“in_api_settings_seq”不存在

在Oracle中,我使用IN_API_SETTINGS_SEQ.NEXTVAL,这很好用。我正在从Oracle合并到PostgreSQL,不确定我做错了什么。


@VaoTsun 是的,我是用 pgAdmin4 创建的,并且我可以在序列中看到它们,它们位于相同的模式表和序列下面。 - xMilos
@VaoTsun 是的,这个方法可行,但是这是同一个用户,有没有办法进行检查? - xMilos
1
在PostgreSQL中,“当前”模式由search_path定义,与拥有表的用户或会话用户无关(除非您的search_path中有"$user")。 - Laurenz Albe
1
select relnamespace::regnamespace,relowner::regrole from pg_class where relname = 'in_api_settings_seq' and relkind = 'S'; - Vao Tsun
1
@MasterYi,select current_setting('search_path'); 中是什么? - Vao Tsun
显示剩余6条评论
3个回答

17

指定模式

nextval('in_api_settings_seq')

所以它将会是这样

nextval('schema_name.in_api_settings_seq')

从序列的名称来看,我认为它是自动生成的,因此它将被分配为默认值,因此您可以尝试

INSERT INTO in_api_settings ( 
   ENTITY_ID, 
   ACTIVE_START_DATE, 
   ACTIVE_END_DATE) 
 VALUES ( 
   DEFAULT, 
   current_date, 
   null)

谢谢您的回答,我会尝试使用DEFAULT。 - xMilos
如何在不使用模式前缀的情况下访问模式内的表?这个解决方案可以避免在序列前使用模式名称。 - xMilos
这正是我正在寻找的东西。 - undefined

14

为模式和序列使用不同的引号。

SELECT NEXTVAL('"schema_name"."sequence_tbl"')

例如:SELECT NEXTVAL('"Master_SHM"."ATTRIBUTE_ID_SEQ"');

 nextval
---------
       5
(1 row)

0
在我的特定情况下,通过使用简单引号并用双引号“点(.)双引号分隔模式名称,它已经起作用了。序列名称为enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接