You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 14.2添加分号后出现未终止引号字符串错误求助

PostgreSQL 14.2 INSERT语句含分号时触发"unterminated quoted string"错误的解决方案

问题本质

你遇到的错误是因为字符串中的分号被SQL解析器/客户端工具误判为语句结束符,提前截断了INSERT语句,导致引号未闭合;同时嵌套单引号的转义逻辑在复杂场景下也容易引发解析异常。

最优解决方案

直接使用PostgreSQL专属的美元符号引用(Dollar-Quoted Strings),彻底规避单引号转义和分号截断问题,这是处理含特殊字符SQL字符串的标准方案。

修改后的可执行SQL

INSERT INTO engine_migrations ("name", "description", "schema", "created_at", "up", "down", "active")
VALUES (
    'Create Table users',
    'undefined',
    '{"resource":"Table","migration":{"name":"users","primaryKey":"SERIAL"},"operation":"Create"}',
    '2023-08-18T09:40:49.55656Z',
    '',
    $$DELETE FROM "public"."engine_tables" WHERE name = 'users';DROP TABLE "public"."users";$$,
    true
);

方案说明

  • 用$$包裹down字段内容后,PostgreSQL会将$$之间的所有内容视为完整字符串,不会解析其中的单引号、分号等特殊字符
  • 若担心$$与内容冲突,可自定义唯一标签,比如$migration_sql$DELETE FROM ...;DROP TABLE ...;$migration_sql$

备选方案(不推荐)

如果必须用单引号包裹,需确保所有单引号正确转义,同时配置客户端工具不将字符串内的分号识别为语句结束符(不同工具设置不同),修改后语句如下:

INSERT INTO engine_migrations ("name", "description", "schema", "created_at", "up", "down", "active")
VALUES (
    'Create Table users',
    'undefined',
    '{"resource":"Table","migration":{"name":"users","primaryKey":"SERIAL"},"operation":"Create"}',
    '2023-08-18T09:40:49.55656Z',
    '',
    'DELETE FROM "public"."engine_tables" WHERE name = ''users'';DROP TABLE "public"."users";',
    true
);

注:此方案依赖工具配置,兼容性差,优先推荐美元符号引用

内容的提问来源于stack exchange,提问作者Dicky Raambo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:27:52