为公共模式创建的扩展在数据库中不可用

Mil*_*iez 5 postgresql psql postgresql-extensions

所以,我创建了citext扩展schema public,我可以看到它在那里,但是它在该模式的数据库中不可用。数据库public也在其中,因为它是从postgres用户创建的,并且在创建时没有指定架构。这是包含更多数据的屏幕截图: 在此处输入图片说明

所以,您可以看到扩展程序在那里,但是一旦我连接到数据库,它就不再可用,我基本上必须将它安装在数据库中。任何想法如何使其最初也可用于数据库?

PgSQL v9.6

joa*_*olo 3

简短回答

您实际上正在使用(至少)两个数据库。您安装CITEXT错了。

更长的答案

在第一个数据库(其名称未显示)中,您安装CITEXT. 这个数据库可能就是postgres安装PostgreSQL时默认创建的数据库。

然后使用该\c命令并切换到另一个数据库 ( sensordata)。您需要在此数据库中创建您的扩展。

也就是说,你应该这样做:

\c sensordata 
CREATE EXTENSION citext;
\dx
Run Code Online (Sandbox Code Playgroud)

如果需要citext在多个数据库中使用该模块,则需要在每个数据库中安装该模块。其他数据库上的扩展名并不重要。数据库之间互不干扰。

每个 PostgreSQL 集群(=数据库安装)(默认情况下)都有一个名为postgres. 如果您使用psql,则它是您“默认”连接的那个。您实际上不需要拥有postgres数据库。我猜postgres数据库是你安装的地方CITEXT扩展的地方。

默认情况下,每个 PostgreSQL 数据库都有一个公共模式。


PostgreSQL 的工作方式与(例如)MySQL 不同,在 MySQL 中您可以通过单个连接同时访问多个数据库(前提是您拥有具有正确权限的用户)。

在 PostgreSQL 中,您可以通过单个连接访问一个数据库。在数据库中,您可以根据需要访问任意数量的模式。模式在 PostgreSQL 中扮演的角色几乎与数据库扮演的角色相同在 MySQL 中

也可以看看: