PostgreSQLの設定
カテゴリ:データベース
CentOS/Ubuntu 両対応
PostgreSQL の初期設定
PostgreSQLをインストールしたら、CentOSの場合のみ、初回のみ以下のコマンドを実行し、初期化します。
# postgresql-setup initdb
PostgreSQLを起動
# systemctl start postgresql
データベースに接続
初期設定ではログイン方式はident認証が設定されており、OSのログインユーザーとPostgreSQLのユーザーがマップされています。また初期設定ではPostgreSQLのスーパーユーザー「postgres」が作成されているため、ユーザーをpostgresに切り替えident認証でPostgreSQLに接続します。
※パスワード認証に変更する方法は後述します。
# su - postgres
注意rootユーザーで実行していない場合はpostgresのパスワードが聞かれます。初期設定ではパスワードは設定されていないため、sudo passwd postgres でパスワードを設定してください。
psqlコマンドで接続します。
$ psql psql (10.17) Type "help" for help. postgres=#
※上記のように「postgres=#」が表示されれば接続成功です。
ユーザーの作成
「hoge」ユーザーをパスワード付きで作成する場合は以下のコマンドを実行します。
postgres=# CREATE USER hoge WITH PASSWORD 'pass'; CREATE ROLE
作成した「hoge」ユーザーにスーパーユーザー、データベース作成、ロール作成の権限を付与する場合は以下のコマンドを実行します。
postgres=# ALTER ROLE hoge WITH SUPERUSER CREATEDB CREATEROLE; ALTER ROLE
ユーザーのパスワードを変更
「postgres」ユーザーにパスワードを設定しておきます。
パスワードを変更する場合は、以下のコマンドを実行します。
postgres=# ALTER USER postgres WITH PASSWORD 'pass'; ALTER ROLE
データベースの作成
以下のコマンドで「hoge」ユーザーが所有者の「hoge_db」データベースを作成します。
postgres=# CREATE DATABASE hoge_db OWNER hoge; CREATE DATABASE
データベースの一覧を表示
以下のコマンドでデータベースの一覧が表示されます。
作成した「hoge_db」が作成されていることが確認できます。
postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+-----------+---------+-------+----------------------- postgres | postgres | SQL_ASCII | C | C | template0 | postgres | SQL_ASCII | C | C | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | SQL_ASCII | C | C | =c/postgres + | | | | | postgres=CTc/postgres (3 rows)
データベースから切断するには \q を入力します。
アクセス制御
ちなみに、CentOSのみ、初期設定ではパスワード認証での接続は無効になっています。
# psql -U hoge -h 127.0.0.1 -d hoge_db psql: FATAL: Ident authentication failed for user "hoge"
これは、/var/lib/pgsql/data/pg_hba.conf ファイルで 127.0.0.1/32 からのident認証(OSのログインユーザーとPostgreSQLのユーザーをマップさせる)のみが許可されているためです。
# tail /var/lib/pgsql/data/pg_hba.conf local all all peer # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 ident host replication all ::1/128 ident
METHODについて、pg_hba.confファイルでは以下のように説明されています。
# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256", # "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert". # Note that "password" sends passwords in clear text; "md5" or # "scram-sha-256" are preferred since they send encrypted passwords.
参考METHODをscram-sha-256にすればscram-sha-256もしくはpasswordで認証することができます。
パスワード認証を許可するためには、以下のようにMETHODをmd5やscram-sha-256、passwordに変更します。
# tail /var/lib/pgsql/data/pg_hba.conf local all all peer # IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 # IPv6 local connections: host all all ::1/128 scram-sha-256
参考Ubuntuのpg_hba.confファイル(/etc/postgresql/xx/main/pg_hba.conf)では、初めからMETHODはscram-sha-256に設定されています。(xxはPostgreSQLのバージョン)
設定を反映するためにPostgreSQLを再起動します。
# systemctl restart postgresql
パスワード認証で接続できることを確認します。
# psql -U hoge -h 127.0.0.1 -d hoge_db Password for user hoge: psql (10.17) Type "help" for help. hoge_db=>
もしスーパーユーザー権限で操作したい場合は、postgresユーザーに切り替えてpsqlコマンドを実行しなくても、以下のようにパスワード認証でログインする事ができます。
※先にpostgresユーザーのパスワードを設定しておく必要があります。
# psql -U postgres -h 127.0.0.1 ユーザ postgres のパスワード: psql (8.4.20) "help" でヘルプを表示します. postgres=#
※postgresユーザーでJavaやPHPなどのWebアプリケーションから127.0.0.1のデータベースにパスワード認証で接続する場合は、この設定は必須になります。
PostgreSQLを自動起動に設定
OS起動時にPostgreSQLが自動起動するように設定します。
# systemctl enable postgresql
公開日時:2014年08月09日 15:26:15
最終更新日時:2024年03月20日 16:46:39