如何编辑PostgreSQL存储过程?

如何编辑PostgreSQL存储过程?,postgresql,stored-procedures,stored-functions,Postgresql,Stored Procedures,Stored Functions,我正在慢慢地从MSSQL迁移到PostgreSQL 在MSSQL中,我可以调用已保存过程或函数的编辑,并且管理shell(SQLServerManagementStudio)向我显示过程的文本,因此我不必将其源代码存储在文本文件中的某个位置 如何方便地使用PostgreSQL实现同样的功能?我正在使用pgAdmin III。phpPgAdmin将允许您编辑存储过程并在界面中编辑它们。强烈建议您在问题下方留下关于将它们存储在外部以进行版本控制的注释。Postgres的官方发行版中包括两个客户端—C

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

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


如何方便地使用PostgreSQL实现同样的功能?我正在使用pgAdmin III。

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

Postgres的官方发行版中包括两个客户端—CLI客户端和GUI客户端。两者都支持您想要的功能:对于
psql
它是
\ef
pgAdmin
-右键单击函数,“属性”,“代码”选项卡。

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

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

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


注意当前版本1.14.2中的一个开放bug。默认情况下,
public
对函数具有
EXECUTE
权限。您可以
撤销
此权限-此权限仅对
安全定义程序
功能有用。但是pgAdmin的反向工程DDL语句中缺少此
REVOKE
(NULL与空ACL混淆)。如果删除并重新创建这样的函数,请小心

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

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

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

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

psql -U postgres dbname < file.sql
psql-U postgres dbname
4) 将shell/bat文件的快捷方式放置到快速面板中


5)使用您喜爱的文本编辑器编辑文件,并按下快捷键更新函数。

右键单击对象树中的函数(左侧)->脚本->脚本创建

-或-

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


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

无论如何,强烈建议将存储过程存储在外部文件中(最好是在版本控制系统中)。@a_horse_with_no_name:我更喜欢另一种方法。我有一个测试db集群,用于我进行实验的每个高效db集群(很少复制)。如果认为是好的,我会在高效的db集群中实现。除了通常的备份之外,我还经常运行仅模式备份,尤其是在模式更改之前/之后。传统存储库对数据库架构的使用有限,因为数据不断更改,许多更改无法(轻松)还原。@ErwinBrandstetter:这种方法的问题是,您无法了解从版本x到版本x+1获取数据库需要应用哪些更改。您需要一个集中的位置,以便跟踪每个更改(理想情况下映射到问题通知单)。如果你有不止一个环境(开发、测试、登台、验证、回归、预生产、生产),甚至可能有不止一个版本在生产中(想想不同的国家),我看不出没有VCS你怎么能跟踪所有的变化。@a_horse_没有名字:当然,我的方法有它的局限性。如果环境变得更复杂,如您所描述的,VCS可能是合适的。不过,对于大多数用户来说,它应该是一个很好的解决方案。@Ervin-使用外部文件具有显著的重要优势:VCS,可以使用首选编辑器,更好地组织和注释代码。但是,使用您的系统进行部署是一个好主意,它不会与使用文件proposalIn general发生冲突。我发现您的贡献很有帮助,但在这种特定情况下,您的建议正是paul不想做的:“因此,我不必将其源代码存储在文本文件中的某个位置”-可能是因为他认为这种方法太复杂,不能称之为“方便”。@redolent,您可能需要手动添加
在打开的文件末尾,或者只添加一个
并按enter”。\ef可以工作,但它不会通过在VIM programmers文本编辑器中编辑sql来保存函数。确认添加单个
关闭后
vim
按预期工作。所以:
\ef函数
;改变
ZZ
/
wq
/etc退出vim<代码>