postgresql - 无法使用 Postgres 9.2 安装任何语言
问题描述
一段时间以来,我一直在几台不同的服务器上使用 Postgres 9.2,但在一个特定的 Postgres 实例上的一个特定数据库上,我无法安装任何语言。
$ sudo su - postgres
$ psql
postgres=# select * from pg_language;
这显示internal
、sql
、c
和plpgsql
。
如果我连接并重myDb
试:
postgres=# \connect myDb
You are now connected to database "myDb" as user "postgres".
postgres=# select * from pg_language;
我只看到internal
,sql
和c
。我尝试使用createlang
他们的文档中显示的安装语言并收到错误:
$ createlang plpgsql myDb
createlang: language installation failed: ERROR: language validation function 2247 called for language 13 instead of 1
我可以看到它plpgsql.so
在正确的位置 - 它必须是postgres
数据库才能拥有它。
这也不是plpgsql
特定的,因为我收到相同的错误消息plpythonu
。我可以安装在postgres
数据库中,但不能安装在myDb
数据库中。
文档和论坛没有解决这个问题。
解决方案
您的目录似乎pl_language
已损坏。
您应该看到以下内容:
SELECT oid, * FROM pg_language ;
oid | lanname | lanowner | lanispl | lanpltrusted | lanplcallfoid | laninline | lanvalidator | lanacl
-------+----------+----------+---------+--------------+---------------+-----------+--------------+--------
12 | internal | 10 | f | f | 0 | 0 | 2246 |
13 | c | 10 | f | f | 0 | 0 | 2247 |
14 | sql | 10 | f | t | 0 | 0 | 2248 |
(3 rows)
相反,您输入的c
语言(OID 13)似乎有 1 而不是 2247 lanvalidator
。知道这是怎么发生的吗?你操纵目录了吗?
看看你的pg_language
.
继续进行的安全方法是到pg_dump
您的数据库,删除并重新创建它并加载转储。这应该处理所有目录操作。
如果您喜欢危险的生活,您可以以超级用户身份尝试以下操作:
UPDATE pg_language SET lanvalidator = 2247 WHERE oid = 13;
推荐阅读
- python-3.x - Apache Beam Python SDK -Apache Flink Runner 翻译问题
- python - 设置空数组列表 Django
- selenium - 机器人框架硒检查链接
- javascript - NuxtJS Apollo 模块 TypeError:无法读取未定义的属性“$apolloHelpers”
- postgresql - 如何继承角色的权限?
- android - 颤振错误:java.lang.RuntimeException:无法实例化应用程序
- javascript - 在二维数组和元素排序中更改迭代方向时出现不可预测的行为
- python - bash 将 json 转换为字符串并作为参数传递给 python 脚本
- android - 只是无法设置虚拟设备
- rust - 如何告诉 Rust 函数 `num_traits::pow::Pow` 已经为我的自定义 trait 实现了