PostgreSQL存储过程版本控制

时间:2015-10-11 09:52:01

标签: postgresql

我想在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(整数))。

但我不想删除,我需要新版本的代码

2 个答案:

答案 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;