当前位置: 首页 > 面试题库 >

在``N''或附近的postgres语法错误

拓拔浩阔
2023-03-14
问题内容

我创建了这个表:

CREATE TABLE IF NOT EXISTS config_activity_log
(
  id                      serial primary key,
  activity_name           varchar(100) NOT NULL,
  last_config_version     varchar(50) NOT NULL,
  activity_status         varchar(100) NOT NULL DEFAULT 'Awaiting for cofman',
  cofman_last_update      bigint NOT NULL DEFAULT -1,
  is_error                boolean DEFAULT FALSE,
  activity_timestamp      timestamp DEFAULT current_timestamp
);

我尝试运行以下postgres脚本:

INSERT INTO config_activity_log
    (activity_name, last_config_version, activity_status)
VALUES
    ('test awating deployment','5837-2016-08-24_09-12-22', 'Awaiting for deployment')
ON CONFLICT (activity_name)
DO UPDATE SET
    activity_status = EXCLUDED.activity_status

为什么会出现此语法错误?

psql:upsert_test_log.sql:7: ERROR:  syntax error at or near "ON"
LINE 5: ON CONFLICT (activity_name)

问题答案:

支持版本

根据以上@klin的评论,ON CONFLICTPostgreSQL 9.5及 更高版本支持。

独特的约束

在添加唯一索引activity_name。目前,该列上没有任何约束,因此该列上没有冲突的可能性。

CREATE UNIQUE INDEX UK_config_activity_log__activity_name 
ON config_activity_log (activity_name);

但是,如果您不希望该列是唯一的,那么您打算遇到什么冲突/您希望通过该on conflict操作解决的问题是什么?

请参阅https://www.postgresql.org/docs/9.5/static/sql-insert.html#SQL-ON-
CONFLICT
中的flict_target

另一种语法是修改您的create语句,以在其中包含唯一条件。例如

CREATE TABLE IF NOT EXISTS config_activity_log
(
  id                      serial primary key,
  activity_name           varchar(100) NOT NULL UNIQUE,
  last_config_version     varchar(50) NOT NULL,
  activity_status         varchar(100) NOT NULL DEFAULT 'Awaiting for cofman',
  cofman_last_update      bigint NOT NULL DEFAULT -1,
  is_error                boolean DEFAULT FALSE,
  activity_timestamp      timestamp DEFAULT current_timestamp
);


 类似资料:
  • 问题内容: 我是Postgres的新手,正在从事我的工作。我不得不创建一个只有1列的表,然后让我在pgadmin III上运行以下语句: 当我运行此命令时,出现以下错误:“ IF”或附近的语法错误 我已经看过这个38.6.2。条件句38.6.2。条件句,我对此不太了解,是否需要将查询更改为 然后当它结束时,我应该以: 为什么毕竟有错误? 问题答案: IF和其他PL / pgSQL功能仅在PL /

  • 我在Postgres中执行了这个SQL语句 而且 是表名 是具有整数数据类型的列名。 我想根据用户的输入将数据类型修改为boolean或text或varchar(256)等。但是当我运行查询时,我得到了错误 错误:“modify”或“modify”附近有语法错误 不确定是什么问题。右侧查询需要帮助。

  • 我试图通过使用postgres数据库设置Spring Boot项目。我的实体是:- 用户 作用 用户_角色 我的< code > application . properties 文件如下所示 所以每当我运行这个应用程序。在postgresql数据库上成功创建了user_role和role表。但用户实体抛出异常。 错误说:- 正如您所看到的实体上的错误点。但是当应用程序连接到mysql数据库时,相

  • 问题内容: 我有一个小查询,并在其旁边放了一个联合查询。但是,联合中存在语法错误。 这是我收到的错误 问题答案: 我知道出了什么问题。您必须在查询的末尾且仅在末尾下订单。它给了我一个错误,因为它认为查询已结束。 做到了。

  • 我想通过psycopg2将csv文件导入PostgreSQL。但是,csv文件列名包含特殊字符。我可以用这些代码行通过psycopg2创建一个表。 当我想使用copy_from函数导入带有这些代码行的csv文件时。 它总是返回错误psycopg2。错误。SyntaxError:在“/”处或附近出现语法错误 我尝试在特殊字符之前使用反斜杠,或者将特殊列名放在双引号中,但它仍然返回相同的错误消息。如何

  • 首先,有类似的问题,比如1,2,3,4,5,但没有提到解决这个问题的答案。 LogCat错误 09-02 05:27:31.213: E/SQLiteDatabase(8442):错误插入日=2个月=9值=3.0年=2015 09-02 05:27:31.213: E/SQLiteDatabase(8442):android.database.sqlite.SQLiteExc0019:近空:语法错