【问题标题】:Cannot see body of function in Dbeaver/PgAdmin在 Dbeaver/PgAdmin 中看不到函数体
【发布时间】:2018-02-14 13:50:40
【问题描述】:

我使用 DBeaver 连接到 postgreSQL 数据库(8.3 版)。当查找函数并尝试查看它的主体时,我收到了错误消息,指出存在 ERROR WHILE READING SOURCE: SQL Error [42883]: function pg_get_functiondef(oid) does not exists。 我该如何克服这个问题?

【问题讨论】:

  • 此功能在 8.3 (!) 中不存在。如果由于某种原因你不能更新你的数据库,我认为是这种情况,我建议你使用 pgAdmin III,它是一个用于 PostgreSQL 的 kickass IDE。另一种选择是使用更通用的驱动程序在 DBeaver 中创建连接。
  • pgAdmin3 存在完全相同的问题 - 它不显示来自 postgreSQL 8.3 的函数
  • 啊,好吧,在这种情况下,它比我想象的要严重得多:D 我想知道如果你用手装箱会发生什么:CREATE OR REPLACE FUNCTION pg_get_functiondef(oid) RETURNS text AS 'pg_get_functiondef' LANGUAGE internal STABLE STRICT COST 1; ALTER FUNCTION pg_get_functiondef(oid) OWNER TO postgres; COMMENT ON FUNCTION pg_get_functiondef(oid) IS 'definition of a function';
  • 是的,我也想知道但无法运行它。我想如果我运行原始的 pg_get_functiondef(oid) 它会起作用,但我很害怕这样做。
  • 是的。所以我猜你最终不得不升级你的数据库版本,这不是一个坏主意:-)祝你好运!

标签: postgresql dbeaver


【解决方案1】:

pg_get_functiondef(oid) 在 Postgres 8.4 (release notes) 中发布,因此 DBeaver 无法使用它来获取函数 def。在创建新连接时尝试使用 PostgreSQL(通用)驱动程序。它对旧版本的 Postgres 有更好的支持。

【讨论】:

  • 我已经在使用 PostgreSQL(Generic) 驱动程序,但仍然无法正常工作。如果我自己创建 pg_get_functiondef(oid) 会怎样?
  • 不能说我知道这是否会奏效,但值得一试。在您在 dev 上测试之前,我不会在生产服务器上建议它。该函数是一个内置的 C 函数,所以我不认为有一个直接的 SQL 等价物可以用来插入函数定义,但你应该能够使用 pg_proc 表和 select ::regproc从 OID 中获取 proc 名称来构建某些东西。
  • 在开发中我们有新版本的 PostgreSQL,我认为除了升级数据库之外没有其他解决方案。感谢您的帮助!
猜你喜欢
  • 2018-07-21
  • 2019-07-04
  • 2011-11-08
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
相关资源
最近更新 更多