【その5】PostgreSQLの設定【初めてのAWSデプロイ編】
投稿者: urumos
作成日: 2022年5月29日16:04
更新日: 2022年5月29日21:48
カテゴリ: 初めてのAWSデプロイ
タグ:
前回でpostgreとpostgre-contribはインストール済み。
現状確認。下記コマンドでactive(running)もしくはactive (exited)と表示されればOK
sudo systemctl status postgresql.service
⇒active (exited)と表示された。OK。
postrgesユーザーのターミナルに移動。(postgresはPostgreSQLの管理ユーザー)
sudo -u postrges -i
コマンドラインが「postgres@ip-10-0-1-10:~$」に切り替わった。
ユーザーを作る。(DB作成権限あり)
createuser --createdb --username=postgres --pwprompt [任意のユーザー名]
すると下記のエラーが出た
could not connect to server: No such file or directory
Is the server running locally and accepting connections
on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
エラーでググってもよく分からない
一度exitしてXXXに戻り、下記を実行
sudo service postgresql initdb
sudo service postgresql start
特に何も起こらない
postgresqlの基礎知識を勉強しなきゃな予感。勉強しよう。
下記のページがまとまっていそう。
https://www.dbonline.jp/postgresql/
どうやらエラーで出てきた5432というのはpostgresqlがデフォルトで使うポート番号だそうだ。
つまり、ポートが空いてないですよ、という意味かな
次にpsqlというのは、PostgreSQLを操作するためのコマンドツールとのこと。
書式は下記
psql -h ホスト名 -p ポート番号 -U ロール名 -d データベース名
このサイトの説明がかなり勉強になるのでコピペする
【以下コピペ】
ホスト名は PostgreSQL が起動しているホスト名または IP アドレスです。
デフォルトの値が localhost となっていますので、
ローカルホストで動いている PostgreSQL に接続する場合は省略できます。
ポート番号は使用するポート番号です。
デフォルトの値が PostgreSQL のインストール時に設定した値(通常は 5432 )となっているので
別のポート番号を使用するとき以外は省略できます。
ロール名は PostgreSQL をインストールした直後はスーパーユーザーである
postgres ロールしか作成されていませんので -U postgres と指定してください。
ロール名を省略した場合は OS のユーザー名が使用されます。
※ PostgreSQL では一般的にユーザーと呼ばれるものとグループと呼ばれるものを
まとめてロールと呼んでいます。
データベース名には接続するデータベース名を指定します。
省略した場合はロール名と同じ名前のデータベースに接続します。
( postgres データベースは自動で作成されており、
postgres ロールで接続した場合は postgres データベースに接続します)。
すべて指定して PostgreSQL に接続する場合は次のようになります。
psql -h localhost -p 5432 -U postgres -d postgres
locahost の場合はホスト名の指定は省略でき、ポート番号も省略できます。
またロール名と同じデーベースに接続する場合はデータベース名を省略できるので、
次のように実行しても同じです。
psql -U postgres
【コピペ終わり】
インストールについては、WindowsとLinux(Ubuntu)では色々と違うみたい。
その他、色々調べた情報を整理する
・postgreのバージョンを指定しないでインストールすると良くない(?)
⇒一度パージ(完全削除)して再度バージョン指定してインストールして解決した例もある。
・postgre-serverとpostgre-develを一緒にインストールしている人もいる
・postgre設定ファイルは「postgresql.conf」「pg_hba.conf」「pg_ident.conf」の3つある。
⇒しかし自分のUbuntu内で探したところ、「postgresql.conf」はあったが位置が説明と違い、中身も違う(変な4行だけ書かれている)。
「pg_hba.conf」「pg_ident.conf」に関してはファイル自体が無かった。
・インストール前に「リポジトリのパス、認証キーの設定をしている」という記事も複数あった。
⇒apt-keyについて。
「apt-key」は、「apt」が パッケージの認証に使用するキーの一覧を管理するコマンドです。
Ubuntu公式以外からパッケージを取得するには、このコマンドで認証する鍵情報を取り込んでおく必要があります。
書式
apt-key adv –keyserver <取得するキーをホストするサーバーURL> –recv-keys <公開鍵ID>
・「sudo su - postgres psql」で操作するのは間にbashが仲介している形。
・クラスターがどうこうと書いてある記事もある。
うーん。。。わからん。。
迷っていても進まないので何かやってみよう
postgresqlをアンインストールして最初からインストールし直そうとも思ったが、
下記のサイトの状況が似ている(pg_hba.confというファイルどころかディレクトリすらない)ので
この通りにやってみる
https://femoghalvfems.info/archives/20776
「ようやく、ここからが本題なのですけれども、必要なファイルが無いときは初期化したり、
ツールで作成させると問題の解決につながることもあります」とのこと
下記を実行
sudo pg_createcluster 11 main --start
⇒下記のエラーが出た
Error: no initdb program for version 11 found
自分のpostgreのバージョンが12.9だったので、11を12に変えてやってみる
sudo pg_createcluster 12 main --start
⇒下記のメッセージが出て成功したっぽい!
Creating new PostgreSQL cluster 12/main ...
/usr/lib/postgresql/12/bin/initdb -D /var/lib/postgresql/12/main --auth-local peer --auth-host md5
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "C.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/12/main ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Tokyo
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
Success. You can now start the database server using:
pg_ctlcluster 12 main start
Ver Cluster Port Status Owner Data directory Log file
12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
「必要なファイルが揃いますと、設定ファイルも検索で見つかるようになりますし、
RDBMS にも接続できるようになります。」とのこと。
以前何も出なかった下記を実行
sudo find / -name pg_hba.conf
/etc/postgresql/12/main/pg_hba.conf
おお!でた!!!
行き詰ったところから再開
sudo -u postgres psql
could not change directory to "/home/XXX": Permission denied
psql (12.9 (Ubuntu 12.9-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
コマンドがpostgre=#に変わった!できたっぽい!!
クラスターの生成で解決した。根本的な原因はわからないけど、
apt -list --installedで見たときに、元々Ubuntuに入ってたっぽいpostgresqlがあったから、
もしかしたらそれと競合して上手くクラスターが生成されなかったとかかな?
いずれにせよ解決したのでよかった。
【追記】多分原因はこれっぽい(要はUbuntuのaptでインストールできるパッケージは構成が違うという話)
https://lets.postgresql.jp/documents/tutorial/ubuntu/4
postgresアカウントへの切り替え
sudo -i -u postgres
※-iオプションについて
「rootユーザーのデフォルトのシェルをログインシェルとして実行する。
コマンドを指定しなかった場合は対話シェルとなる」
意味はよくわからないが、"-i"オプションなしだと変な出力が出て進めない。
ちなみにsudo su - postgresでも出来た。
linux勉強ノートを見返したところ、
su の "-"オプションは「カレントディレクトリを
rootユーザーのホームディレクトリに切り替える」というものだった。
確かに、"-"オプションなしで実行するとカレントディレクトリは/home/XXXのままだった。
一方"-"オプションありで実行するとカレントディレクトリは/var/lib/postgresqlになった。
つまりそのユーザーにとってのホームディレクトリに移動するという意味だろう。
psqlの起動
psql
なお上記2つのコマンドを繋げて下記でもOK
sudo -u postgres psql
下記コマンドでデータベース一覧を表示
\l
初期状態では「postgres」「template0」「template1」の3つのデータベースがあった。
下記コマンドでpsqlを終了
\q
これで色々やる準備ができた!
PostgreSQLを体系的に学ぶには下記のサイトも良さそう
https://postgresweb.com/introduction-to-postgresql
いい機会なので、ざっと目を通してみる。
以下メモ
・コマンドラインでpsqlでやる以外にもpgAdminというGUIで操作できるアプリも使える
・ユーザー作成方法は2種類ある。
①SQLコマンドを使う方法
SQLコマンドはpsqlコマンドでデータベースに接続した後にデータベースを操作するためのコマンド。
ユーザー名「user1」を作成する
CREATE USER user1;
ユーザー名「user1」をパスワード「pass1234」で作成する
CREATE USER user1 WITH PASSWORD 'pass1234';
ユーザー名「user1」をパスワード「pass1234」で作成し、スーパーユーザー権限とする
CREATE USER user1 WITH PASSWORD 'pass1234' SUPERUSER;
ユーザー名「user1」をパスワード「pass1234」で作成し、データベース作成権限、ユーザー作成権限を加える(スーパーユーザーではない)
CREATE USER user1 WITH PASSWORD 'pass1234' CREATEDB CREATEROLE;
なお上記はCREATE USERの代わりにCREATE ROLEでも可
②psqlコマンドを使う場合
psqlコマンドはOSで実行するpsqlというプログラム。
書式
createuser -h サーバー名 -p ポート番号 -U 実行するユーザー名 -d -r -s 作成するユーザー名
例1
createuser -h localhost -p 5432 -U postgres -d -l -r -s -P user1
例2
createuser -h 192.168.10.10 -p 5432 -U postgres -d -l -r -s -P user2
例3
createuser -U postgres -d -l -r -s -P user3 -- ローカル環境の場合
オプション
h…サーバーのホスト名やIPを指定
p…ポート番号を指定
U…createuserを実行するユーザー
d…データベースの作成権限
D…データベースの作成できない権限
l…ログイン権限
L…ログイン不可権限
r…ユーザー作成の権限
R…ユーザー作成ができない権限
s…スーパーユーザー権限の付与
S…スーパーユーザーでない権限の付与
P…パスワード設定する(厳密には実行時に、パスワード設定メッセージが表示される)
ここで理解したが、エラー地獄に入った時に実行した下記はpsqlコマンドだったのだろう。
createuser --createdb --username=postgres --pwprompt [任意のユーザー名]
そして、--createdbが上記でいうdで、--usernameが上記でいうUで、--pwpromptが上記でいうPだろう。
もうちょっと分かりやすく書いて欲しいものだ。。
でもこうやって一歩ずつ理解して成長していくのだろう。
・PostgreSQLではlocaleの使用は非推奨
ちなみにロケールを使用しないことを「--no-locale」と記述するが「--locale=C」としても全く同じ意味。
さて、だいぶ時間がかかってしまったが、日記アプリのデプロイ作業に戻る
下記コマンドでpostgresユーザーに切り替えと同時にpsqlを起動
sudo -u postgres psql
新規データベースの作成
CREATE DATABASE djblogdb;
新規ユーザーの作成
CREATE USER XXX WITH PASSWOERD 'ZZZZZ';
データベースの日本語化
ALTER ROLE XXX SET client_encoding TO 'utf8';
トランザクション分離レベルを設定
ALTER ROLE XXX SET default_transaction_isolation TO 'read committed';
タイムゾーンの変更
ALTER ROLE XXX SET timezone TO 'UTC+9';
ユーザーに権限付与
GRANT ALL PRIVILEGES ON DATABASE djblogdb TO XXX;
データベースを抜ける
\q
続いてpsycopg2もインストール
(psycopg2はPythonからPostgreSQLを操作するためのライブラリ)
pip3.9 install psycopg2
pg_hba.confの編集(sudoでvim)⇒やっていない記事もあったので一旦スキップする。
local all all をpeerからmd5に変更(その前にOS側とDB側ののpostgreユーザーのパスワードを設定しておく?)
host all all の127.0.0.1/32の下に0.0.0.0/0 md5を行追加?それともその列をmd5に変更?
local replication all ををpeerからmd5に変更
★補足
・hbaはhost-based authentication: ホストベース認証の略
・Peer認証はpostgresqlからローカルに接続する際に、接続するユーザー(OS側のユーザー)と
データベースへのログインユーザー(データベース側のユーザー)が一致している場合のみ許可する方式。
・認証方法のうち「Password」は暗号化なしで認証するため、「md5」か「scram-sha-256」が推奨される。
・localとhostの違い
localはLinuxとかのローカルマシンからpsql接続する場合。
hostはローカルまたはネットワークのマシン上からTCP/IP接続する場合。gunicornはこれ?
・列記した場合は上から順にフィルターされる。
・DATABASE列のreplicationについて
データベースにおいてレプリケーションとは複製の意味で、大抵のデータベースはこの機能を持っている。
具体的には稼働用DBと待機用DBが用意され、稼働用のデータを待機用にリアルタイム複製する。
万が一稼働用に障害などがあった場合に、すぐに待機用に切り替えることでシステムを継続できる。
一方で一般的なバックアップとは違い、即時複製なので、たとえば間違って削除したファイルの復元はできない。
よって定期バックアップとの併用が推奨される。
postgre.confの編集(sudoでvim)⇒やっていない記事もあったので一旦スキップする。
listen_addressをlocalhostから*に
※これをやらないとリモートのTCP/IP接続が出来ない。
再起動
sudo systemctl restart postgresql
これでpostgresqlの設定は完了!
長かったぜ、、。
現状確認。下記コマンドでactive(running)もしくはactive (exited)と表示されればOK
sudo systemctl status postgresql.service
⇒active (exited)と表示された。OK。
postrgesユーザーのターミナルに移動。(postgresはPostgreSQLの管理ユーザー)
sudo -u postrges -i
コマンドラインが「postgres@ip-10-0-1-10:~$」に切り替わった。
ユーザーを作る。(DB作成権限あり)
createuser --createdb --username=postgres --pwprompt [任意のユーザー名]
すると下記のエラーが出た
could not connect to server: No such file or directory
Is the server running locally and accepting connections
on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
エラーでググってもよく分からない
一度exitしてXXXに戻り、下記を実行
sudo service postgresql initdb
sudo service postgresql start
特に何も起こらない
postgresqlの基礎知識を勉強しなきゃな予感。勉強しよう。
下記のページがまとまっていそう。
https://www.dbonline.jp/postgresql/
どうやらエラーで出てきた5432というのはpostgresqlがデフォルトで使うポート番号だそうだ。
つまり、ポートが空いてないですよ、という意味かな
次にpsqlというのは、PostgreSQLを操作するためのコマンドツールとのこと。
書式は下記
psql -h ホスト名 -p ポート番号 -U ロール名 -d データベース名
このサイトの説明がかなり勉強になるのでコピペする
【以下コピペ】
ホスト名は PostgreSQL が起動しているホスト名または IP アドレスです。
デフォルトの値が localhost となっていますので、
ローカルホストで動いている PostgreSQL に接続する場合は省略できます。
ポート番号は使用するポート番号です。
デフォルトの値が PostgreSQL のインストール時に設定した値(通常は 5432 )となっているので
別のポート番号を使用するとき以外は省略できます。
ロール名は PostgreSQL をインストールした直後はスーパーユーザーである
postgres ロールしか作成されていませんので -U postgres と指定してください。
ロール名を省略した場合は OS のユーザー名が使用されます。
※ PostgreSQL では一般的にユーザーと呼ばれるものとグループと呼ばれるものを
まとめてロールと呼んでいます。
データベース名には接続するデータベース名を指定します。
省略した場合はロール名と同じ名前のデータベースに接続します。
( postgres データベースは自動で作成されており、
postgres ロールで接続した場合は postgres データベースに接続します)。
すべて指定して PostgreSQL に接続する場合は次のようになります。
psql -h localhost -p 5432 -U postgres -d postgres
locahost の場合はホスト名の指定は省略でき、ポート番号も省略できます。
またロール名と同じデーベースに接続する場合はデータベース名を省略できるので、
次のように実行しても同じです。
psql -U postgres
【コピペ終わり】
インストールについては、WindowsとLinux(Ubuntu)では色々と違うみたい。
その他、色々調べた情報を整理する
・postgreのバージョンを指定しないでインストールすると良くない(?)
⇒一度パージ(完全削除)して再度バージョン指定してインストールして解決した例もある。
・postgre-serverとpostgre-develを一緒にインストールしている人もいる
・postgre設定ファイルは「postgresql.conf」「pg_hba.conf」「pg_ident.conf」の3つある。
⇒しかし自分のUbuntu内で探したところ、「postgresql.conf」はあったが位置が説明と違い、中身も違う(変な4行だけ書かれている)。
「pg_hba.conf」「pg_ident.conf」に関してはファイル自体が無かった。
・インストール前に「リポジトリのパス、認証キーの設定をしている」という記事も複数あった。
⇒apt-keyについて。
「apt-key」は、「apt」が パッケージの認証に使用するキーの一覧を管理するコマンドです。
Ubuntu公式以外からパッケージを取得するには、このコマンドで認証する鍵情報を取り込んでおく必要があります。
書式
apt-key adv –keyserver <取得するキーをホストするサーバーURL> –recv-keys <公開鍵ID>
・「sudo su - postgres psql」で操作するのは間にbashが仲介している形。
・クラスターがどうこうと書いてある記事もある。
うーん。。。わからん。。
迷っていても進まないので何かやってみよう
postgresqlをアンインストールして最初からインストールし直そうとも思ったが、
下記のサイトの状況が似ている(pg_hba.confというファイルどころかディレクトリすらない)ので
この通りにやってみる
https://femoghalvfems.info/archives/20776
「ようやく、ここからが本題なのですけれども、必要なファイルが無いときは初期化したり、
ツールで作成させると問題の解決につながることもあります」とのこと
下記を実行
sudo pg_createcluster 11 main --start
⇒下記のエラーが出た
Error: no initdb program for version 11 found
自分のpostgreのバージョンが12.9だったので、11を12に変えてやってみる
sudo pg_createcluster 12 main --start
⇒下記のメッセージが出て成功したっぽい!
Creating new PostgreSQL cluster 12/main ...
/usr/lib/postgresql/12/bin/initdb -D /var/lib/postgresql/12/main --auth-local peer --auth-host md5
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "C.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/12/main ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Tokyo
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
Success. You can now start the database server using:
pg_ctlcluster 12 main start
Ver Cluster Port Status Owner Data directory Log file
12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
「必要なファイルが揃いますと、設定ファイルも検索で見つかるようになりますし、
RDBMS にも接続できるようになります。」とのこと。
以前何も出なかった下記を実行
sudo find / -name pg_hba.conf
/etc/postgresql/12/main/pg_hba.conf
おお!でた!!!
行き詰ったところから再開
sudo -u postgres psql
could not change directory to "/home/XXX": Permission denied
psql (12.9 (Ubuntu 12.9-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
コマンドがpostgre=#に変わった!できたっぽい!!
クラスターの生成で解決した。根本的な原因はわからないけど、
apt -list --installedで見たときに、元々Ubuntuに入ってたっぽいpostgresqlがあったから、
もしかしたらそれと競合して上手くクラスターが生成されなかったとかかな?
いずれにせよ解決したのでよかった。
【追記】多分原因はこれっぽい(要はUbuntuのaptでインストールできるパッケージは構成が違うという話)
https://lets.postgresql.jp/documents/tutorial/ubuntu/4
postgresアカウントへの切り替え
sudo -i -u postgres
※-iオプションについて
「rootユーザーのデフォルトのシェルをログインシェルとして実行する。
コマンドを指定しなかった場合は対話シェルとなる」
意味はよくわからないが、"-i"オプションなしだと変な出力が出て進めない。
ちなみにsudo su - postgresでも出来た。
linux勉強ノートを見返したところ、
su の "-"オプションは「カレントディレクトリを
rootユーザーのホームディレクトリに切り替える」というものだった。
確かに、"-"オプションなしで実行するとカレントディレクトリは/home/XXXのままだった。
一方"-"オプションありで実行するとカレントディレクトリは/var/lib/postgresqlになった。
つまりそのユーザーにとってのホームディレクトリに移動するという意味だろう。
psqlの起動
psql
なお上記2つのコマンドを繋げて下記でもOK
sudo -u postgres psql
下記コマンドでデータベース一覧を表示
\l
初期状態では「postgres」「template0」「template1」の3つのデータベースがあった。
下記コマンドでpsqlを終了
\q
これで色々やる準備ができた!
PostgreSQLを体系的に学ぶには下記のサイトも良さそう
https://postgresweb.com/introduction-to-postgresql
いい機会なので、ざっと目を通してみる。
以下メモ
・コマンドラインでpsqlでやる以外にもpgAdminというGUIで操作できるアプリも使える
・ユーザー作成方法は2種類ある。
①SQLコマンドを使う方法
SQLコマンドはpsqlコマンドでデータベースに接続した後にデータベースを操作するためのコマンド。
ユーザー名「user1」を作成する
CREATE USER user1;
ユーザー名「user1」をパスワード「pass1234」で作成する
CREATE USER user1 WITH PASSWORD 'pass1234';
ユーザー名「user1」をパスワード「pass1234」で作成し、スーパーユーザー権限とする
CREATE USER user1 WITH PASSWORD 'pass1234' SUPERUSER;
ユーザー名「user1」をパスワード「pass1234」で作成し、データベース作成権限、ユーザー作成権限を加える(スーパーユーザーではない)
CREATE USER user1 WITH PASSWORD 'pass1234' CREATEDB CREATEROLE;
なお上記はCREATE USERの代わりにCREATE ROLEでも可
②psqlコマンドを使う場合
psqlコマンドはOSで実行するpsqlというプログラム。
書式
createuser -h サーバー名 -p ポート番号 -U 実行するユーザー名 -d -r -s 作成するユーザー名
例1
createuser -h localhost -p 5432 -U postgres -d -l -r -s -P user1
例2
createuser -h 192.168.10.10 -p 5432 -U postgres -d -l -r -s -P user2
例3
createuser -U postgres -d -l -r -s -P user3 -- ローカル環境の場合
オプション
h…サーバーのホスト名やIPを指定
p…ポート番号を指定
U…createuserを実行するユーザー
d…データベースの作成権限
D…データベースの作成できない権限
l…ログイン権限
L…ログイン不可権限
r…ユーザー作成の権限
R…ユーザー作成ができない権限
s…スーパーユーザー権限の付与
S…スーパーユーザーでない権限の付与
P…パスワード設定する(厳密には実行時に、パスワード設定メッセージが表示される)
ここで理解したが、エラー地獄に入った時に実行した下記はpsqlコマンドだったのだろう。
createuser --createdb --username=postgres --pwprompt [任意のユーザー名]
そして、--createdbが上記でいうdで、--usernameが上記でいうUで、--pwpromptが上記でいうPだろう。
もうちょっと分かりやすく書いて欲しいものだ。。
でもこうやって一歩ずつ理解して成長していくのだろう。
・PostgreSQLではlocaleの使用は非推奨
ちなみにロケールを使用しないことを「--no-locale」と記述するが「--locale=C」としても全く同じ意味。
さて、だいぶ時間がかかってしまったが、日記アプリのデプロイ作業に戻る
下記コマンドでpostgresユーザーに切り替えと同時にpsqlを起動
sudo -u postgres psql
新規データベースの作成
CREATE DATABASE djblogdb;
新規ユーザーの作成
CREATE USER XXX WITH PASSWOERD 'ZZZZZ';
データベースの日本語化
ALTER ROLE XXX SET client_encoding TO 'utf8';
トランザクション分離レベルを設定
ALTER ROLE XXX SET default_transaction_isolation TO 'read committed';
タイムゾーンの変更
ALTER ROLE XXX SET timezone TO 'UTC+9';
ユーザーに権限付与
GRANT ALL PRIVILEGES ON DATABASE djblogdb TO XXX;
データベースを抜ける
\q
続いてpsycopg2もインストール
(psycopg2はPythonからPostgreSQLを操作するためのライブラリ)
pip3.9 install psycopg2
pg_hba.confの編集(sudoでvim)⇒やっていない記事もあったので一旦スキップする。
local all all をpeerからmd5に変更(その前にOS側とDB側ののpostgreユーザーのパスワードを設定しておく?)
host all all の127.0.0.1/32の下に0.0.0.0/0 md5を行追加?それともその列をmd5に変更?
local replication all ををpeerからmd5に変更
★補足
・hbaはhost-based authentication: ホストベース認証の略
・Peer認証はpostgresqlからローカルに接続する際に、接続するユーザー(OS側のユーザー)と
データベースへのログインユーザー(データベース側のユーザー)が一致している場合のみ許可する方式。
・認証方法のうち「Password」は暗号化なしで認証するため、「md5」か「scram-sha-256」が推奨される。
・localとhostの違い
localはLinuxとかのローカルマシンからpsql接続する場合。
hostはローカルまたはネットワークのマシン上からTCP/IP接続する場合。gunicornはこれ?
・列記した場合は上から順にフィルターされる。
・DATABASE列のreplicationについて
データベースにおいてレプリケーションとは複製の意味で、大抵のデータベースはこの機能を持っている。
具体的には稼働用DBと待機用DBが用意され、稼働用のデータを待機用にリアルタイム複製する。
万が一稼働用に障害などがあった場合に、すぐに待機用に切り替えることでシステムを継続できる。
一方で一般的なバックアップとは違い、即時複製なので、たとえば間違って削除したファイルの復元はできない。
よって定期バックアップとの併用が推奨される。
postgre.confの編集(sudoでvim)⇒やっていない記事もあったので一旦スキップする。
listen_addressをlocalhostから*に
※これをやらないとリモートのTCP/IP接続が出来ない。
再起動
sudo systemctl restart postgresql
これでpostgresqlの設定は完了!
長かったぜ、、。