そのため、schema public
のcitext
拡張を作成すると、そこにあることがわかりますが、そのスキーマのデータベース内では使用できません。データベースはpublic
にもあります。これは、postgres
ユーザーから作成され、作成時にスキーマが指定されていないためです。これは、さらにいくつかのデータを含むスクリーンショットです。
つまり、拡張機能が存在することがわかりますが、データベースに接続すると、拡張機能は使用できなくなり、基本的にはデータベース内にインストールする必要があります。最初にデータベースでも利用できるようにする方法はありますか?
PgSQL v9.6
短い答え
(少なくとも)2つのデータベースを実際に使用しています。間違ったものにCITEXT
をインストールしています。
長い回答
最初のデータベース(名前は表示されていません)では、CITEXT
をインストールします。このデータベースはおそらくpostgres
データベースであり、PostgreSQLのインストール時にデフォルトで作成されます。
次に、\c
コマンドを使用して、anotherデータベース(sensordata
)に切り替えます。このデータベースに拡張機能を作成する必要があります。
つまり、次のことを行う必要があります。
\c sensordata
CREATE EXTENSION citext;
\dx
より多くのデータベースでcitext
モジュールを使用する必要がある場合は、それぞれにインストールする必要があります。他のデータベースの拡張機能は重要ではありません。データベースは互いに干渉しません。
すべてのPostgreSQLクラスター(=データベースインストール) (デフォルトでは)postgres
という名前のデータベースが1つあります 。 psql
を使用する場合は、「デフォルト」で接続するものです。実際にpostgres
データベースを持っている必要はありません。 postgres
databaseは、CITEXT
拡張機能をインストールした場所だと思います。
すべてのPostgreSQLデータベースには、デフォルトで1つのpublicスキーマがあります。
PostgreSQLは(たとえば)MySQLのように機能しません。単一の接続を介して複数のデータベースに同時にアクセスできます(適切な権限を持つユーザーがいる場合)。
PostgreSQLでは、単一の接続を介してoneデータベースにアクセスします。データベース内では、必要なだけスキーマにアクセスできます。 PostgreSQLでschemasが果たす役割は、MySQLでdatabaseが果たす役割とほぼ同じです。
以下も参照してください。
これを踏みにじる。
すべての新規作成データベースで拡張機能を使用できるようにする場合は、postgresテンプレートシステムを利用できます。コマンドCREATE DATABASE
は、データベースtemplate1
のコピーを作成します(パラメーター化されたテンプレートが他にない場合)。だからあなたはできる:
template_with_ext_dont_use
template_with_ext_dont_use
およびcreate extension foo
に接続CREATE DATABASE foobar TEMPLATE template_with_ext_dont_use;
で新しいデータベースを作成する新しいデータベース「foobar」は「template_with_ext_dont_use」のコピーであり、拡張機能がインストールされています。