6

我希望能够选择函数的代码。当我尝试这个查询时:

select prosrc from pg_proc where proname = 'my_proc'

我得到一个空列。

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

select proname from pg_proc where prosrc ~* 'part of Function text'

我得到了正确的函数数量和名称。它只是不显示prosrc。任何想法?

PostgreSQL 8.2。pgAdmin III 1.12.2。

谢谢。

4

4 回答 4

2

这是因为 的值prosrc通常以换行开头。通常在创建函数时,您在引用函数文本的 $$(或 $whatever$)之后开始一个新行:

CREATE FUNCTION myfunction() RETURNS integer AS $$
    SELECT 1
$$ LANGUAGE sql;

如果您将其定义为:

CREATE FUNCTION myfunction() RETURNS integer AS $$SELECT 1$$ LANGUAGE sql;

函数文本中不会有换行符。

您可以使用 ltrim 函数切断前导换行符:

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

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

于 2013-08-30T11:15:11.947 回答
2

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

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

于 2011-03-31T17:45:46.930 回答
0

文件 > 选项 > 查询工具 > 查询编辑器 > Max. 每列字符

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

于 2017-11-22T13:02:49.113 回答
0

在以后的版本中,您可以通过右键单击和Scripts -> Create Script

创建脚本

于 2022-03-02T15:48:40.697 回答