データベースサーバにアクセスできるかどうかがわかる最初の試験は、データベースの作成を試みることです。 稼働中のPostgreSQLサーバは多くのデータベースを管理することができます。 典型的には、プロジェクトやユーザごとに別々のデータベースが使用されます。
サイト管理者により使用できるデータベースが既に作成されている場合もあります。 この場合、この段階を飛ばして、次の節まで進んでください。
新しいデータベースを作成するには、以下のコマンドを使用してください。
この例ではmydb
という名前です。
$
createdb mydb
この手順で何も応答がなければ、この段階は成功し、本節の残りは飛ばすことができます。
以下のようなメッセージが現れた場合、PostgreSQLが正しくインストールされていません。
createdb: command not found
PostgreSQLがインストールされていないか、シェルの検索パスに含まれていないのいずれかです。 代わりに絶対パスでそのコマンドを実行してみてください。
$
/usr/local/pgsql/bin/createdb mydb
このパスはサイトによって異なるかもしれません。 この問題を解決するには、サイト管理者に連絡するか、インストール取扱説明書を調べてください。
他の応答として以下もあります。
createdb: could not connect to database postgres: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
これは、サーバが起動していないか、createdb
が想定している状態でサーバが起動していないかを示しています。
こちらも、インストール手順を点検するか管理者に相談してください。
他の応答として以下もあります。
createdb: could not connect to database postgres: FATAL: role "joe" does not exist
ここでjoeのところには、ログインした時のユーザ名が記載されています。
これは、管理者がそのユーザ用のPostgreSQLユーザアカウントを作成していない時に起こります
(PostgreSQLユーザアカウントは、オペレーティングシステムのユーザアカウントとは別です)。
自身が管理者なら、アカウントの作成方法に関して第21章を参照してください。
最初のユーザアカウントを作成するためには、PostgreSQLをインストールした時のオペレーティングシステムのユーザ(通常postgres
)になる必要があります。
PostgreSQLユーザアカウントがオペレーティングシステムのユーザ名と異なる名前で用意されているかもしれません。
その場合は、PostgreSQLのユーザ名を指定するために、-U
スイッチを使用するか、PGUSER
環境変数を設定する必要があります。
ユーザアカウントを持っているが、データベースを作成するために必要な権限を持っていない場合は、以下のメッセージが現れます。
createdb: database creation failed: ERROR: permission denied to create database
全てのユーザがデータベースを新規に作成できる権限を持っているわけではありません。 PostgreSQLがデータベースの作成を拒否した場合、サイト管理者からデータベースを作成する権限を付与してもらう必要があります。 これが発生した場合はサイト管理者に相談してください。 自身でPostgreSQLをインストールしたのであれば、このチュートリアルを実行する時は、サーバを起動したユーザアカウントでログインしてください。 [1]
他の名前のデータベースを作成することもできます。 PostgreSQLは、与えられたサイトでいくつでもデータベースを作成することを許可しています。 データベース名は、先頭がアルファベット文字から始まる、63バイトまでの長さでなければなりません。 簡単な選択は、現在のユーザ名と同じ名前のデータベースを作成することです。 多くのツールでは、データベース名のデフォルトとしてそれを仮定していますので、これにより入力数を減らすことができます。 このデータベースを作成するには、単純に以下を実行します。
$
createdb
データベースを使用しなくなったら、削除することができます。
例えば、mydb
データベースの所有者(作成者)であれば、以下のコマンドでそれを廃棄することができます。
$
dropdb mydb
(このコマンドでは、データベース名のデフォルトはユーザアカウント名ではありません。 常に指定しなければなりません。) この動作は、そのデータベースに関する全てのファイルを物理的に削除しますので、取り消すことはできません。 事前に熟考した場合にのみこれを実施してください。
createdb
やdropdb
の詳細は、それぞれcreatedbとdropdbにあります。
[1] 何故これで上手くいくのかについての説明:PostgreSQLのユーザ名はオペレーティングシステムのユーザアカウントとは分離されています。
データベースに接続するとき、接続に利用するPostgreSQLのユーザ名を選択します。
選択しなければ、デフォルトで現在のオペレーティングシステムのアカウントと同じ名前となります。
これにより、サーバを開始したオペレーティングシステムのユーザと同じ名前のPostgreSQLユーザアカウントが、常に存在するようになっています。
そしてまた、このユーザは常にデータベースを作成する権限を持ちます。
そのユーザとしてログインする代わりに、-U
オプションを毎回使用して、接続するPostgreSQLのユーザ名を選択することができます。