我想在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
还有文档search_path: 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)
但我收到错误:
首先删除函数(DROP FUNCTION increment(整数))。
但我不想删除,我需要新版本的代码
答案 0 :(得分:0)
要重命名某个功能,请使用ALTER FUNCTION
。 E.g:
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) ...
答案 1 :(得分:0)
在设置search_path之前,您可以创建架构; 例如
CREATE SCHEMA myschema;