Postgresql 在 BEGIN 附近创建函数语法错误
Postgresql create function syntax error near BEGIN
这是我试图通过迁移脚本执行的功能。
CREATE OR REPLACE FUNCTION test(key1 text)
RETURNS void AS $$
BEGIN
INSERT INTO table1(c1) VALUES();
END;
$$ LANGUAGE 'plpgsql';
上面的脚本执行成功,但是当我尝试使用 .NET Core 幂等迁移脚本时,它给出了一个错误 ERROR: syntax error at or near "BEGIN"
这是迁移脚本。
DO $$
BEGIN
IF NOT EXISTS(SELECT 1 FROM __EFMigrationsHistory WHERE "MigrationId" = 'migrationid') THEN
CREATE OR REPLACE FUNCTION test(key1 text)
RETURNS void AS $$
BEGIN
INSERT INTO table1(c1) VALUES();
END;
$$ LANGUAGE 'plpgsql';
END IF;
END $$;
我也尝试添加 EXECUTE 仍然是同样的错误。
DO $$
BEGIN
IF NOT EXISTS(SELECT 1 FROM __EFMigrationsHistory WHERE "MigrationId" = 'migrationid') THEN
EXECUTE('CREATE OR REPLACE FUNCTION test(key1 text)
RETURNS void AS $$
BEGIN
INSERT INTO table1(c1) VALUES();
END;
$$ LANGUAGE ''plpgsql'';');
END IF;
END $$;
如何通过检查迁移历史 table 为 create/replace 函数创建 SQL 语句?
解析器对美元引号的重复使用感到困惑。只需给其中之一一个别名就可以了,例如
DO $body$
BEGIN
IF NOT EXISTS(SELECT 1 FROM __EFMigrationsHistory WHERE "MigrationId" = 'migrationid') THEN
EXECUTE('CREATE OR REPLACE FUNCTION test(key1 text)
RETURNS void AS $$
BEGIN
INSERT INTO table1(c1) VALUES();
END;
$$ LANGUAGE ''plpgsql'';');
END IF;
END $body$;
这是我试图通过迁移脚本执行的功能。
CREATE OR REPLACE FUNCTION test(key1 text)
RETURNS void AS $$
BEGIN
INSERT INTO table1(c1) VALUES();
END;
$$ LANGUAGE 'plpgsql';
上面的脚本执行成功,但是当我尝试使用 .NET Core 幂等迁移脚本时,它给出了一个错误 ERROR: syntax error at or near "BEGIN"
这是迁移脚本。
DO $$
BEGIN
IF NOT EXISTS(SELECT 1 FROM __EFMigrationsHistory WHERE "MigrationId" = 'migrationid') THEN
CREATE OR REPLACE FUNCTION test(key1 text)
RETURNS void AS $$
BEGIN
INSERT INTO table1(c1) VALUES();
END;
$$ LANGUAGE 'plpgsql';
END IF;
END $$;
我也尝试添加 EXECUTE 仍然是同样的错误。
DO $$
BEGIN
IF NOT EXISTS(SELECT 1 FROM __EFMigrationsHistory WHERE "MigrationId" = 'migrationid') THEN
EXECUTE('CREATE OR REPLACE FUNCTION test(key1 text)
RETURNS void AS $$
BEGIN
INSERT INTO table1(c1) VALUES();
END;
$$ LANGUAGE ''plpgsql'';');
END IF;
END $$;
如何通过检查迁移历史 table 为 create/replace 函数创建 SQL 语句?
解析器对美元引号的重复使用感到困惑。只需给其中之一一个别名就可以了,例如
DO $body$
BEGIN
IF NOT EXISTS(SELECT 1 FROM __EFMigrationsHistory WHERE "MigrationId" = 'migrationid') THEN
EXECUTE('CREATE OR REPLACE FUNCTION test(key1 text)
RETURNS void AS $$
BEGIN
INSERT INTO table1(c1) VALUES();
END;
$$ LANGUAGE ''plpgsql'';');
END IF;
END $body$;