我有 3 个模式:公共、元数据、数据。
在 PgAdmin III 或 SQL Manager for PostgreSQL 中从“数据”模式调试大型函数时,调试器看不到来自同一模式的任何表或函数。
raise notice
原因函数很大并且依赖于其他函数,使用或编写模式前缀无效。
如何设置默认架构以正确调试它?我猜公共架构是默认的。
我有 3 个模式:公共、元数据、数据。
在 PgAdmin III 或 SQL Manager for PostgreSQL 中从“数据”模式调试大型函数时,调试器看不到来自同一模式的任何表或函数。
raise notice
原因函数很大并且依赖于其他函数,使用或编写模式前缀无效。
如何设置默认架构以正确调试它?我猜公共架构是默认的。
如果您不为它们添加前缀,则应将“search_path”设置为具有所需的所有模式。默认值为:“$user”,public。
您可能应该拥有:元、数据、公共。
见:18.11.1。语句行为
如果您使用 pgAdmin,有两种方法可以调用调试器。
首先,您可以右键单击一个函数并选择“调试”。当您使用此方法时,pgAdmin 将提示您输入任何参数的值
IN
,INOUT
在您选择的函数上设置断点,然后为您调用该函数(使用您提供的参数值)。在这种情况下,您必须确保在启动调试器之前设置了 search_path。您可以使用该命令search_path
为整个数据库设置,也可以使用该ALTER DATABASE...SET
命令为特定用户设置ALTER USER...SET
。search_path
另一种选择是为要调试的函数分配一个值;见ALTER FUNCTION...SET
条款。另一种方法是右键单击函数名称并选择“设置断点”。当您使用此方法时,调试器将在任何进程调用该函数时激活。设置断点后,pgAdmin 将暂停,等待其他会话调用您感兴趣的函数。因此,启动另一个会话,根据需要设置 search_path,然后运行您的函数。当函数启动时,调试器将在您的 pgAdmin 会话中激活。
上下文调试的好处是您可以正常运行您的应用程序,并且只要您的应用程序跨过该函数,调试器就会激活,即使该函数调用深埋在某个其他函数(或运算符,或触发器,或者 ...)