【问题标题】:postgresql nextval throws error relation does not existpostgresql nextval 抛出错误 关系不存在
【发布时间】:2018-02-12 23:18:45
【问题描述】:

我有以下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 创建了它,我可以在序列中看到它,它们在相同的模式表和序列下
  • @VaoTsun 是的,这行得通,它是同一个用户,但有办法检查这个
  • 在 PostgreSQL 中,“当前”模式由 search_path 定义,与拥有表的用户或会话用户无关(除非您的 search_path 中有 "$user" )。
  • select relnamespace::regnamespace,relowner::regrole from pg_class where relname = 'in_api_settings_seq' and relkind = 'S';
  • @MasterYi 和 select current_setting('search_path'); 中有什么?..

标签: sql postgresql


【解决方案1】:

中指定模式
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)

【讨论】:

【解决方案2】:

为模式和序列使用单独的引号

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    相关资源
    最近更新 更多