我想在 Postgres 中对存储过程进行版本控制。例如我尝试这样做:
CREATE OR REPLACE FUNCTION increment(i INT) RETURNS INT AS $$
BEGIN
RETURN i + 1;
END;
$$ LANGUAGE plpgsql;
-- An example how to use the function (Returns: 11)
SELECT increment(10);
我读了这篇文章http://tech.valgog.com/2012/01/schema-based-versioning-and-deployment.html
还有文档搜索路径: http://www.postgresql.org/docs/9.4/static/runtime-config-client.html
我set search_path = v10_15, public;
我想更改返回类型:
CREATE OR REPLACE FUNCTION increment(i INT) RETURNS VARCHAR(70)
但我得到错误:
First remove function (DROP FUNCTION increment (integer)).
但我不想删除,我需要新版本的代码
最佳答案
要重命名函数,请使用 ALTER FUNCTION
。例如:
ALTER FUNCTION increment RENAME TO v10_15.increment;
如果您实际上是在尝试在新位置创建新函数:
如果 search_path
上已经存在同名函数,CREATE OR REPLACE FUNCTION
将找到它并尝试替换现有函数。
与其依赖 search_path
来定义存储内容的位置,不如明确命名要在其中创建函数的模式:
CREATE OR REPLACE FUNCTION v10_15.increment(i INT) ...
关于PostgreSQL 存储过程版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33063662/