【问题标题】:How to edit PostgreSQL stored procedure?如何编辑 PostgreSQL 存储过程?
【发布时间】:2012-04-09 06:54:22
【问题描述】:

我正在慢慢地从 MSSQL 迁移到 PostgreSQL。

在 MSSQL 中,我可以调用已保存的过程或函数的编辑,并且管理 shell (SQL Server Management Studio) 向我显示过程的文本,因此我不必将其源代码存储在文本文件中的某个位置。

如何以方便的方式对 PostgreSQL 做同样的事情?我正在使用 pgAdmin III。

【问题讨论】:

  • 强烈建议将存储过程存储在外部文件中(最好是在版本控制系统中)。
  • @a_horse_with_no_name:我更喜欢不同的方法。对于我进行实验的每个生产数据库集群(不经常复制),我都有一个测试数据库集群。当认为好的时候,我在生产数据库集群中实现。除了通常的备份之外,我还经常运行仅模式备份,尤其是在更改模式之前/之后。传统存储库对数据库模式的使用有限,因为数据不断变化,许多更改无法(轻松)恢复。
  • @ErwinBrandstetter:这种方法的问题在于,您失去了将数据库从版本 x 升级到版本 x+1 需要应用哪些更改的概览。您需要一个可以跟踪每个更改的集中位置(理想情况下映射到问题单)。如果您有多个环境(开发、测试、暂存、验证、回归、预生产、生产),甚至可能有多个生产版本(考虑不同的国家),我不知道您如何跟踪所有没有 VCS 的变化。
  • @a_horse_with_no_name:当然,我的方法有其局限性。如果环境变得更复杂,就像你描述的那样,VCS 可能是合适的。不过,对于大多数用户来说,这应该是一个很好的解决方案。
  • @Ervin - 使用外部文件具有显着的重要优势:VCS,可以使用首选编辑器,更好地组织和注释代码。但是使用您的系统进行部署是个好主意,并且与使用文件建议没有冲突

标签: postgresql stored-procedures stored-functions


【解决方案1】:

Postgres 的官方发行版中包含 2 个客户端 - CLI 一个 psql 和一个 GUI 一个 pgAdmin。两者都支持你想要的:psql\efpgAdmin - 右键单击​​函数,“属性”,“代码”选项卡。

【讨论】:

  • @redolent,您可能需要在打开的文件末尾手动添加;,或者如果您已经关闭了编辑器,则只需添加一个; 并回车。跨度>
  • \ef 有效,但它不会通过在VIM程序员文本编辑器中编辑sql来保存函数。
  • 确认在关闭vim 后添加单个; 可以按预期工作。所以:\ef function;做出改变; ZZ/wq/etc 退出 vim; ; 在 psql cli 上
【解决方案2】:

这也是编辑和测试代码的便捷方式。

1) 从 pgAdmin 中提取所需 SQL 函数的代码。

2) 将带有函数的代码放入file.sql中。

3)在与file.sql相同的目录下创建一个shell/bat文件:

psql -U postgres dbname < file.sql

4) 将 shell/bat 文件的快捷方式放到快速面板中。

5) 使用您喜欢的文本编辑器编辑文件并按下快捷方式以更新功能。

【讨论】:

  • 总的来说,我发现您的贡献很有帮助,但在这种特定情况下,您的建议正是保罗 NOT 想要做的:“所以我不必存储它的来源文本文件中某处的代码”——可能是因为他认为这种方法太复杂而不能称为“方便”。
【解决方案3】:

pgAdmin 中,如果您激活此选项,您可以让您的生活更轻松:

文件 -> 选项.. -> 查询工具 -> [x] 从主窗体复制 SQL 到 SQL 对话框

然后,SQL 窗格中显示的任何内容都将被复制到新打开的查询工具窗口中。因此,在对象浏览器中选择功能,然后单击工具栏中的放大镜图标。

请注意当前版本 1.14.2 中的一个未解决的错误。默认情况下,public 对函数具有 EXECUTE 权限。你可以REVOKE这个特权——它只对SECURITY DEFINER函数有用。但是这个 REVOKE 在来自 pgAdmin 的反向工程 DDL 语句中缺失(NULL 与空 ACL 混淆)。删除并重新创建此类函数时要小心!

【讨论】:

    【解决方案4】:

    phpPgAdmin 将允许您编辑您的存储过程并在界面中编辑它们。强烈建议您在问题下留下关于将它们存储在外部以进行版本控制的评论。

    【讨论】:

      【解决方案5】:

      右键单击对象树中的函数(左侧)-> Scripts -> Script CREATE

      -或-

      执行新的 SQL 查询 -> 将“创建或替换函数...”的代码复制到它

      然后编辑脚本,不要忘记执行它

      【讨论】:

        猜你喜欢
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多