【问题标题】:PostgreSQL Stored Procedure versioningPostgreSQL 存储过程版本控制
【发布时间】:2015-10-11 09:52:00
【问题描述】:

我想在 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)

但我得到错误:

第一个删除函数(DROP FUNCTION 增量(整数))。

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

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    要重命名函数,请使用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) ...
    

    【讨论】:

    • 是的,但必须在后端的产品代码中更改其名称。将increment 替换为v10_15.increment
    • 所以你真的想替换它,而不是创建一个新程序?但是您想将新架构移至新架构?
    【解决方案2】:

    在设置 search_path 之前,您可以创建架构; 例如

    CREATE SCHEMA myschema;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 2014-05-19
      • 1970-01-01
      相关资源
      最近更新 更多