PostgreSQL 存储过程版本控制

标签 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

还有文档搜索路径: 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/

相关文章:

java - 将 map 转换为 HStore

c++ - 任何用于 PostgreSQL 的 ole db 提供者/消费者?

python - 简单的 Python 方法需要永远执行/运行

postgresql - 当我尝试恢复 postgres 备份时权限被拒绝

sql - 具有 HABTM 关系的过滤模型

postgresql - 如何两次引用外键表?

postgresql - 在Docker容器中替换postgresql.conf

postgresql - 在 Postgresql 中选择未锁定的行

Postgresql - 从 Excel 文件填充数据库

laravel - 如何在 Laravel 测试期间禁用 postgresql 中的外键约束