web-dev-qa-db-ja.com

データベース内で使用できないパブリックスキーマ用に作成された拡張機能

そのため、schema publiccitext拡張を作成すると、そこにあることがわかりますが、そのスキーマのデータベース内では使用できません。データベースはpublicにもあります。これは、postgresユーザーから作成され、作成時にスキーマが指定されていないためです。これは、さらにいくつかのデータを含むスクリーンショットです。 enter image description here

つまり、拡張機能が存在することがわかりますが、データベースに接続すると、拡張機能は使用できなくなり、基本的にはデータベース内にインストールする必要があります。最初にデータベースでも利用できるようにする方法はありますか?

PgSQL v9.6

3
Milkncookiez

短い答え

(少なくとも)2つのデータベースを実際に使用しています。間違ったものにCITEXTをインストールしています。

長い回答

最初のデータベース(名前は表示されていません)では、CITEXTをインストールします。このデータベースはおそらくpostgresデータベースであり、PostgreSQLのインストール時にデフォルトで作成されます。

次に、\cコマンドを使用して、anotherデータベース(sensordata)に切り替えます。このデータベースに拡張機能を作成する必要があります。

つまり、次のことを行う必要があります。

\c sensordata 
CREATE EXTENSION citext;
\dx

より多くのデータベースでcitextモジュールを使用する必要がある場合は、それぞれにインストールする必要があります。他のデータベースの拡張機能は重要ではありません。データベースは互いに干渉しません。

すべてのPostgreSQLクラスター(=データベースインストール) (デフォルトでは)postgresという名前のデータベースが1つありますpsqlを使用する場合は、「デフォルト」で接続するものです。実際にpostgresデータベースを持っている必要はありません。 postgresdatabaseは、CITEXT拡張機能をインストールした場所だと思います。

すべてのPostgreSQLデータベースには、デフォルトで1つのpublicスキーマがあります。


PostgreSQLは(たとえば)MySQLのように機能しません。単一の接続を介して複数のデータベースに同時にアクセスできます(適切な権限を持つユーザーがいる場合)。

PostgreSQLでは、単一の接続を介してoneデータベースにアクセスします。データベース内では、必要なだけスキーマにアクセスできます。 PostgreSQLでschemasが果たす役割は、MySQLでdatabaseが果たす役割とほぼ同じです。

以下も参照してください。

2
joanolo

これを踏みにじる。

すべての新規作成データベースで拡張機能を使用できるようにする場合は、postgresテンプレートシステムを利用できます。コマンドCREATE DATABASEは、データベースtemplate1のコピーを作成します(パラメーター化されたテンプレートが他にない場合)。だからあなたはできる:

  1. 新しいデータベースを作成するtemplate_with_ext_dont_use
  2. template_with_ext_dont_useおよびcreate extension fooに接続
  3. CREATE DATABASE foobar TEMPLATE template_with_ext_dont_use;で新しいデータベースを作成する

新しいデータベース「foobar」は「template_with_ext_dont_use」のコピーであり、拡張機能がインストールされています。

0
Henry