我希望能够选择函数的代码。 当我尝试这个查询时:
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。
感谢。
答案 0 :(得分:2)
我在PostgreSQL 9.0.3上使用pgAdmin III也遇到了这个问题。在我看来,这与字符串太长,pgAdmin III无法正常显示有关。如果你在命令提示符下执行它,那么你应该没问题。许多数据库管理工具都会遇到字符串截断问题。
有趣的是,如果您在pgAdmin III中选择prosrc单元并使用键盘进行复制,则可以粘贴输出。这可能是某种奇怪的显示错误。
答案 1 :(得分: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中垂直调整行的大小,则可以看到完整值。
答案 2 :(得分:0)
档案>选项>查询工具>查询编辑器>最大。每列字符
或者只是在对象浏览器中查看它。