Ubuntu にデータベースを作成する
データベースのインストール前提条件
- HTTP Proxy の設定が必要な場合、HTTP Proxy の設定(環境変数)が予め行われていること。
- ネットワーク設定が予め行われていること。
- データベースの設定は、説明では以下の使用します。
- データベース名称: dbname
- データベースホスト名: dbhost
- データベースサービスポート: 5432
- データベースユーザ名: dbuser
- データベースユーザパスワード: dbpass
データベースセットアップ手順
-
パッケージリストを更新します。
$ sudo apt update -
PostgreSQL をインストールし、起動します。
Ubuntu 18.04 LTS の場合Ubuntu 20.04 LTS の場合$ sudo apt install -y postgresql-10Ubuntu 22.04 LTS の場合$ sudo apt install -y postgresql-12Ubuntu 24.04 LTS の場合$ sudo apt install -y postgresql-14$ sudo apt install -y postgresql-16 -
PostgreSQL の設定 (postgresql.conf) を変更します。
Ubuntu 18.04 LTS の場合Ubuntu 20.04 LTS の場合
$ sudo vi /etc/postgresql/10/main/postgresql.confUbuntu 22.04 LTS の場合$ sudo vi /etc/postgresql/12/main/postgresql.confUbuntu 24.04 LTS の場合$ sudo vi /etc/postgresql/14/main/postgresql.conf$ sudo vi /etc/postgresql/16/main/postgresql.confファイルの以下の箇所を変更します。[変更前]
[変更後]#listen_addresses = 'localhost' # what IP address(es) to listen on;listen_addresses = '*' # what IP address(es) to listen on;Ubuntu 22.04 LTS, 24.04 LTS の場合、ファイルの以下の箇所も変更します。[変更前]
[変更後]#password_encryption = scram-sha-256 # scram-sha-256 or md5password_encryption = md5 # scram-sha-256 or md5設定変更を反映するため、データベースを再起動します。$ sudo service postgresql restart -
データベースを作成します。
$ sudo su - postgres$ psql -l※ 作成しようとしているデータベース名のデータベースが無いことを確認します。
$ createdb --encoding=UTF-8 dbname -
データベースユーザ(データベースにアクセスする際の認証で使用するユーザ)を作成します。
$ createuser -P dbuser※ パスワード入力(ここでは dbpass)
-
PostgreSQL バージョン15以降の場合、publicスキーマへの書き込みを許可する必要があります。
「PostgreSQL 16.4」の16.4の箇所でPostgreSQLのバージョンを確認できますので、このバージョンが15以降だった場合は、以下の操作を実行します。$ echo 'select version();' | psql dbnameversion---------------------------------------------------------------------------------------------------------------------------------PostgreSQL 16.4 (Ubuntu 16.4-0ubuntu0.24.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit(1 row)$ echo 'grant create on schema public to public' | psql dbname -
5.で作成したユーザに dbname へのアクセス権限を付与
$ echo 'grant all privileges on database dbname to dbuser' | psql dbname$ exit -
PostgreSQL の設定 (pg_hba.conf) を変更します。
- [VM サーバと同一のホスト上にデータベースをセットアップしている場合]
-
7-1-1. まず、docker0 インタフェースの IP アドレスを確認します。
$ ip address show dev docker03: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:e6:14:05:27 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:e6ff:fe14:527/64 scope linkvalid_lft forever preferred_lft forever上記の場合、データベースサーバの IP アドレスは 172.17.0.1 で、ネットワークアドレスは 172.17.0.0/16 であることを確認できます。
-
7-1-2. 7-1-1.より docker0 のネットワークアドレスが 172.17.0.0/16 であることが 確認できるため、PostgreSQL 設定ファイルの pg_hba.conf にアクセス許可の設定を 行います。
Ubuntu 18.04 LTS の場合Ubuntu 20.04 LTS の場合$ sudo vi /etc/postgresql/10/main/pg_hba.confUbuntu 22.04 LTS の場合$ sudo vi /etc/postgresql/12/main/pg_hba.confUbuntu 24.04 LTS の場合$ sudo vi /etc/postgresql/14/main/pg_hba.conf$ sudo vi /etc/postgresql/16/main/pg_hba.confファイルの以下の箇所を変更します。[最後に追記]host dbname dbuser 172.17.0.0/16 md5 -
7-1-3. 設定変更を反映するため、データベースを再起動します。
$ sudo service postgresql restart - [VM サーバと別のホスト上にデータベースをセットアップしている場合]
-
7-2-1. VM サーバの IP アドレスを xxx.xxx.xxx.xxx とした場合、PostgreSQL 設定ファイルの pg_hba.conf にアクセス許可の設定を行います。
Ubuntu 18.04 LTS の場合Ubuntu 20.04 LTS の場合$ sudo vi /etc/postgresql/10/main/pg_hba.confUbuntu 22.04 LTS の場合$ sudo vi /etc/postgresql/12/main/pg_hba.confUbuntu 24.04 LTS の場合$ sudo vi /etc/postgresql/14/main/pg_hba.conf$ sudo vi /etc/postgresql/16/main/pg_hba.confファイルの以下の箇所を変更します。[最後に追記]host dbname dbuser xxx.xxx.xxx.xxx/32 md5 -
7-2-2. 設定変更を反映するため、データベースを再起動します。
$ sudo service postgresql restart
- 以上で、データベースのセットアップは完了です。
データベースバックアップ手順
-
データベースのバックアップは、データベースのセットアップを行ったホスト上で以下のように操作します。
$ sudo su - postgres$ pg_dump dbname | gzip -c > /tmp/dbname.psql.gz作成された /tmp/dbname.psql.gz がバックアップファイルです。
データベースリストア手順
-
データベースのリストアは、データベースのセットアップを行ったホスト上で以下のように操作します。データベースを一度削除していますので、十分に注意して実行してください。dbname.psql.gz は、データベースのバックアップで作成したバックアップファイルです。操作の 前に /tmp/ ディレクトリに転送しておきます。
$ sudo su - postgres$ dropdb dbname$ createdb --encoding=UTF-8 dbname$ gzip -dc /tmp/dbname.psql.gz | psql dbnameなお、pg_dump コマンドは異なるホスト上のデータベースを指定してバックアップを取得することも可能ですが、PostgreSQL のバージョンが異なる場合にはアクセスに失敗する可能性があります。そのため、データベースのバックアップについては、データベースサーバ上で実行することをお勧めします。取得したバックアップファイルについては、異なるバージョンの PostgreSQL でも基本的には読み込むことが可能ですが、一部互換性のない機能が使用されていた場合にエラーが出力される場合があります。