将日志文件中的行号与函数代码相匹配

Dav*_*d S 5 postgresql plpgsql pgadmin

我在尝试在触发函数中调试时遇到错误。在 Postgres 日志中,我有以下内容:

2012-08-16 21:41:23 PDT ERROR:  Unknown period: D
2012-08-16 21:41:23 PDT CONTEXT:  PL/pgSQL function "handle_promotion_update" 
    line 60  at assignment
SQL statement "UPDATE promotion SET some_column = foo + 1
    WHERE id = NEW.promotion_id"
PL/pgSQL function "handle_new_reward" line 94 at SQL statement
Run Code Online (Sandbox Code Playgroud)

所以,看来我的问题可能从“第 60 行”开始

我的问题是行号从哪里开始?如果我进入 pgAdmin 并查看函数声明,它的顶部有“helper”(如删除函数)。所以,我不认为它来自那里。但是,它包含函数声明吗?或者只是从 行开始BEGIN

Erw*_*ter 4

您在 PostgreSQL 服务器日志中看到的行号从函数体的左引号所在的行开始。您必须在此之前添加行才能获得 pgAdmin SQL 编辑器中的绝对行号。

不要感到困惑:如果您在尝试创建函数时遇到错误,您会得到不同的行号:它们指的是整个执行的脚本,而运行时错误中的行号指的是函数体。

  • @danjuggler:函数体是一个纯文本字符串。它要么以单引号开头,要么更常见的是以美元引用开头。详细信息:http://stackoverflow.com/a/12320729/939860 或 http://stackoverflow.com/a/12172353/939860 旁白:我从未提到过双引号(`"`)。 (2认同)