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

Liquibase PostgreSQL变更集执行SQL脚本时出现异常求助

问题解决方法

在PostgreSQL的DO匿名代码块中,不能直接使用SELECT语句返回结果(因为DO块默认返回void),你遇到的错误正是因为这一点。解决方法很简单:把需要执行但不需要返回结果的SELECT替换成PERFORM。

修改后的SQL代码如下:

DO $$
BEGIN
IF EXISTS
( SELECT 1
FROM   information_schema.tables
WHERE  table_schema = 'test1'
AND    table_name = 'table1'
)
THEN
INSERT INTO table2(col1, col2, col3, col4)
SELECT col1, col2, col3, col4
FROM test1.table1;
PERFORM SETVAL('test_seq', COALESCE((SELECT MAX(ID)+1 FROM test1.table1), 1), FALSE);
END IF;
END
$$;

关键说明

  • PERFORM是PostgreSQL中专门用于在PL/pgSQL(包括DO块)中执行不需要返回结果的查询的语句,它会执行查询但丢弃结果,完美适配DO块的要求。
  • 你之前尝试加RETURN参数失败,是因为DO块本身是无返回值的,不能带参数返回,所以完全不需要加RETURN语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:57:02