关于PostgreSQL:PostgreSQL-如何在pgAdmin中查看函数文本/源代码?

 2021-04-26 

PostgreSQL - How to see Function Text/Source in pgAdmin?

我希望能够选择功能代码。
当我尝试此查询时:

1
SELECT prosrc FROM pg_proc WHERE proname = 'my_proc'

我得到一个空列。

问题是,似乎prosrc列确实包含函数文本。
当我尝试此查询时:

1
SELECT proname FROM pg_proc WHERE prosrc ~* 'part of Function text'

我获得了正确的函数编号和名称。
它只是不显示prosrc。
有什么主意吗?

PostgreSQL 8.2。
pgAdmin III 1.12.2。

谢谢。


这是因为prosrc的值通常以换行符开头。通常,在创建函数时,您需要在$$(或$ whatever $)之后在函数文本后加新行:

1
2
3
CREATE FUNCTION myfunction() RETURNS INTEGER AS $$
    SELECT 1
$$ LANGUAGE SQL;

如果您将其定义为:

1
CREATE FUNCTION myfunction() RETURNS INTEGER AS $$SELECT 1$$ LANGUAGE SQL;

函数文本中没有换行符。

您可以使用ltrim函数来截断换行符:

1
SELECT ltrim(prosrc, E'\\x0a') FROM pg_proc WHERE proname = 'myfunction';

或者,如果您在PGAdmin中垂直调整行的大小,则可以看到完整的值。


我也在PostgreSQL 9.0.3上使用pgAdmin III遇到了这个问题。在我看来,这与pgAdmin III无法正确显示的字符串太长有关。如果在命令提示符下执行它,那么应该没问题。许多数据库管理工具都会遇到字符串截断问题。

有趣的是,如果您在pgAdmin III中选择prosrc单元并用键盘将其复制,则可以粘贴输出。这可能是某种奇怪的显示错误。


文件>选项>查询工具>查询编辑器>最大值每列字符数

或者只是在对象浏览器中查看它。