PostgreSQL

postgresql.conf

postgreSQL全体を制御するファイルです。いくつかある設定ファイルの中で最も更新頻度が高いとおもわれます。設定値はshowコマンド、current_setting()関数、pg_settingsビュー等で確認する事ができます。なおALTER SYSTEM SET XXXで当ファイルの設定を書き換える事可能ですが、PostgreSQLの再起動をしないと反映されないので気を付けてください。

所在場所
$ ls -lt $PGDATA/postgresql.conf
-rw-------. 1 postgres postgres 28093  9月  5 21:34 /var/lib/pgsql/13/data/postgresql.conf
[postgres@vm022 data]$

REPORTING AND LOGGING

log_statement

実行したSQLをログファイルへ出力するには

# デフォルトはコメントアウトされている
#log_statement = 'none'                 # none, ddl, mod, all
log_statement = 'all'                   # none, ddl, mod, all
log_min_duration_statement

SQLの実行に指定した「ミリ秒以上」所要した場合に、対象SQLと所要時間をログファイルに記録します。デフォルトはコメントアウトされている。

log_min_duration_statement = 100        # -1 is disabled, 0 logs all statements
                                        # and their durations, > 0 logs only
                                        # statements running at least this number
                                        # of milliseconds

CONNECTIONS AND AUTHENTICATION

listen_addresses と port

インストールした状態ではいずれの項目もコメントアウトされていて、外部からの接続ができないようになっています。

# - Connection Settings -

#
listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)

CLIENT CONNECTION DEFAULTS

search_path(デフォルトサーチパス)の確認

デフォルトのサーチパスを定義します。(postgresql.conf内の記載はどうやら、デフォルト値が「コメントとして」記載されているようです。そのため以下は、設定上search_pathへの設定はされていないが、デフォルト値”$user”, public がされています。)

# デフォルトの記載は以下のように「コメント化」されています。
#
#search_path = '"$user", public'        # schema names
# 以下のように書き換えサーバ再起動で設定を反映すると、publicスキーマのオブジェクト
# に対してはスキーマ修飾が必要になります。
#
search_path = '"$user"'        # schema names
lc_messagessearch_path

なぜかlc_messages = ‘ja_JP.utf8’ではWindows環境のpsqlでのログインエラーメッセージが文字化けするんですよ、、ログインした後のエラーメッセージは文字化けすることなく表示されるのにです。

-- powershell から以下実行しています
--
sooni >> psql -U postgres -d postgress -h myposdb
ユーザー postgres のパスワード:
psql: エラー: "myposdb" (192.168.3.22)、ポート 5432でのサーバーへの接続に失敗しました: FATAL:  繝ヲ繝シ繧カ繝シ"postgres"縺ョ繝代せ繝ッ繝シ繝芽ェ崎ィシ縺ォ螟ア謨励@縺セ縺励◆
sooni >>

いろいろ試行錯誤するもわからずで、、根本解決にはならないですが、、lc_messages = ‘en_US’ にしてとりあえず対応しました。(サービス再起動忘れずに)

# These settings are initialized by initdb, but they can be changed.
#lc_messages = 'ja_JP.utf8'                    # locale for system error message
lc_messages = 'en_US'                   # locale for system error message

この通り文字化けは解決します

sooni >> psql -U postgres -d postgress -h myposdb
ユーザー postgres のパスワード:
psql: エラー: "myposdb" (192.168.3.22)、ポート 5432でのサーバーへの接続に失敗しました: FATAL:  password authentication failed for user "postgres"
sooni >>

--当然ながらpsqlを使いログインした後に発生するエラーメッセージも英語となります
postgres=> create database smtdb01
postgres-> ;
ERROR:  permission denied to create database
postgres=>

lc_messagesの確認方法

showコマンド、current_setting()関数、pg_settingsビュー等で確認する事ができます

-- showコマンドでの確認
myposdb=> show lc_messages;
 lc_messages
-------------
 en_US
(1 行)

-- current_setting()関数での確認
myposdb=# select current_setting('lc_messages');
 current_setting
-----------------
 en_US
(1 行)

myposdb=#
-- pg_settingsビューでの確認
myposdb=> select name,setting,context,vartype,reset_val
myposdb-> from pg_settings where name = 'lc_messages';
    name     | setting |  context  | vartype | reset_val
-------------+---------+-----------+---------+-----------
 lc_messages | en_US   | superuser | string  | en_US
(1 行)


myposdb=>
試行錯誤
  • 環境変数PGCLIENTENCODINGをUTF8に設定
    $env:PGCLIENTENCODING=”UTF8″
  • chcpでコードページをUTF8にする(chcp 65001)
  • powershell v5.1x/v7.xからの実行、dosコマンドからの実行も改善せず

pg_hba.conf

postgreSQLサービス再起動

スポンサーリンク