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

PostgreSQL父子表插入报错:ERROR: syntax error at or near "int" 求解

PostgreSQL中通过父表主键向子表插入数据的正确方式

你遇到的SQL Error [42601]是因为代码误用了非PostgreSQL的语法(比如SQL Server的变量写法),PostgreSQL对变量声明、赋值的规则和你写的不一样,无法直接在普通SQL语句中使用DECLARE和@变量。以下是符合PostgreSQL语法的实现方式:

方式一:使用变量(符合你的需求)

PostgreSQL中变量必须在PL/pgSQL代码块中声明和使用,你可以用DO匿名块来实现:

DO $$
DECLARE
    indiaCountry int;
BEGIN
    -- 查询Countries的id并赋值给变量
    SELECT id INTO indiaCountry FROM Countries WHERE description = 'asdf';
    
    -- 向Cities插入数据
    INSERT INTO Cities (country_code_id, city_id, description)
    VALUES (indiaCountry, 1, 'abc');
END $$;

方式二:直接用子查询插入(更简洁)

如果不需要单独使用变量,也可以直接将子查询作为值插入,省去变量声明步骤:

INSERT INTO Cities (country_code_id, city_id, description)
VALUES (
    (SELECT id FROM Countries WHERE description = 'asdf'),
    1,
    'abc'
);

额外注意事项

  • 确保Countries表中description = 'asdf'的记录唯一,否则子查询会返回多行导致插入失败;如果存在多条匹配记录,可添加LIMIT 1来指定取第一条。
  • 你的表创建语句中,Countries的主键约束名coutry_pkey拼写错误(少了个n,应为country_pkey),虽然不影响功能,但建议修正以保证命名规范。

内容的提问来源于stack exchange,提问作者Naveen Pandia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:26:05