【问题标题】:PostgreSQL - How to see Function Text/Source in pgAdmin?PostgreSQL - 如何在 pgAdmin 中查看函数文本/源代码?
【发布时间】:2011-03-31 15:46:18
【问题描述】:

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

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.

谢谢。

【问题讨论】:

    标签: postgresql pgadmin


    【解决方案1】:

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

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

    【讨论】:

    • 确实像一个魅力!另外 - 很高兴知道这不是数据库发布问题。谢谢老兄。
    • 这是因为您所看到的只是函数文本开头的换行符。使单元格垂直变大,您将看到其余部分。这不是错误。
    • 我称之为用户体验错误。
    【解决方案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 中垂直调整行的大小,您可以看到完整的值。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        在以后的版本中可以通过右键Scripts -> Create Script来实现

        【讨论】:

          猜你喜欢
          • 2022-01-10
          • 2018-10-02
          • 2018-09-26
          相关资源
          最近更新 更多