PostgreSQL メモ
PostgreSQL
- psql
- テーブル一覧 (\dt)
- テーブル構造 (\d)
- データベース一覧と文字コードの表示 (\l)
- パスワードの入力と指定したファイルの実行
- pg_dump
- トリガー一覧
- トリガーが動作するテーブルの一覧
- トリガー削除
- ロールの確認
- 実行されたSQLをログに出力
- ロールの削除
- コマンドプロンプトでの文字化け
psql
C:\> psql -h test.rds.amazonaws.com -U gsys -d g09
ユーザ g09 のパスワード:
psql (9.6.6, サーバー 9.6.2)
SSL接続(プロトコル: TLSv1.2, 暗号化方式: ECDHE-RSA-AES256-GCM-SHA384,
ビット長: 256, 圧縮: オフ)
"help" でヘルプを表示します.
g09=> \q
ユーザ g09 のパスワード:
psql (9.6.6, サーバー 9.6.2)
SSL接続(プロトコル: TLSv1.2, 暗号化方式: ECDHE-RSA-AES256-GCM-SHA384,
ビット長: 256, 圧縮: オフ)"help" でヘルプを表示します.
g09=> \q
| ユーザー | gsys |
|---|---|
| パスワード | 入力 |
| データベース名 | g09 |
テーブル一覧 (\dt)
g09=> \dt;
リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------+--------------------------------+----------+--------
g09 | aa_sys_ver | テーブル | g09
g09 | trn_send_data | テーブル | g09
:
リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------+--------------------------------+----------+--------
g09 | aa_sys_ver | テーブル | g09
g09 | trn_send_data | テーブル | g09
:
テーブル構造 (\d)
g09=> \d trn_send_data;
テーブル "g09.trn_send_data"
列 | 型 | 修飾語
-------------+--------------------------------+--------------------
unq_id | numeric(20,0) | not null
vrsn_nmbr | numeric(10,0) | not null default 1
entry_time | timestamp(0) without time zone | not null
updt_time | timestamp(0) without time zone | not null
snd_nmbr | numeric(8,0) | not null
snd_type | character varying(2) |
stts | character varying(1) |
インデックス:
"pk_trn_send_data" PRIMARY KEY, btree (unq_id)
"ux1_trn_send_data" UNIQUE CONSTRAINT, btree (snd_nmbr)
トリガ:
set_trn_send_data_unq_id BEFORE INSERT ON trn_send_data FOR EACH
ROW EXECUTE PROCEDURE "set_trn_send_data_unq_id$trn_send_data"()
テーブル "g09.trn_send_data"
列 | 型 | 修飾語
-------------+--------------------------------+--------------------
unq_id | numeric(20,0) | not null
vrsn_nmbr | numeric(10,0) | not null default 1
entry_time | timestamp(0) without time zone | not null
updt_time | timestamp(0) without time zone | not null
snd_nmbr | numeric(8,0) | not null
snd_type | character varying(2) |
stts | character varying(1) |
インデックス:
"pk_trn_send_data" PRIMARY KEY, btree (unq_id)
"ux1_trn_send_data" UNIQUE CONSTRAINT, btree (snd_nmbr)
トリガ:
set_trn_send_data_unq_id BEFORE INSERT ON trn_send_data FOR EACH
ROW EXECUTE PROCEDURE "set_trn_send_data_unq_id$trn_send_data"()データベース一覧と文字コードの表示 (\l)
g09=> \l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換
演算子) | アクセス権
-----------+-----------+------------------+-------------+------------
-------+-------------------------
g09 | testpgsql | UTF8 | en_US.UTF-8 | en_US.UTF-
8 | =Tc/testpgsql +
:
略
:
(6 行)
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換
演算子) | アクセス権-----------+-----------+------------------+-------------+------------
-------+-------------------------g09 | testpgsql | UTF8 | en_US.UTF-8 | en_US.UTF-
8 | =Tc/testpgsql +:
略
:
(6 行)
パスワードの入力と指定したファイルの実行
パスワードは環境変数PGPASSWORDで設定します。
ファイルに記述されたSQLを実行するには -f オプションでファイルを指定します。
C:\> set PGPASSWORD=g09pass
C:\> psql -h test.rds.amazonaws.com -U gsys -d g09 -f in.sql
C:\> psql -h test.rds.amazonaws.com -U gsys -d g09 -f in.sql
pg_dump
> pg_dump -h t01sv -U t01 -p 5432 t01 > L:\t01.20181126.dmp
パスワード:
パスワード:
容量が足りない場合、以下のエラーが出ました。
> pg_dump -h t01sv -U t01 -p 5432 t01 > t01.20181126.dmp
パスワード:
pg_dump: [アーカイバ] could not write to output file: No space left o
n device
パスワード:
pg_dump: [アーカイバ] could not write to output file: No space left o
n deviceスキーマの比較
pg_dump -Fp -s -U g01 gdb01 > C:\temp\gdb01.sql
pg_dump -Fp -s -U g02 gdb02 > C:\temp\gdb02.sql
pg_dump -Fp -s -U g02 gdb02 > C:\temp\gdb02.sql
| -s | スキーマだけを出力 |
| -Fp | プレーンテキストのSQLにして出力 |
-s を付けないとデータも出力されます。
リストア時にオブジェクトを一度削除してから追加する
gdb09をダンプしてgdb01へ投入する手順を例にコマンドを記載します。
pg_dumpに-cオプションを付けます。
pg_dump -c --if-exists -U g09 -h test.rds.amazon.com gdb09 > g09.2019
1008.pdmp
1008.pdmpダンプファイルを開いて09を01へ置換します。
データフォルダを作成します。 PostgreSQLのバージョンによってパスが違います。
C:\Program Files\PostgreSQL\12\data\g01
テーブルスペースを作成します。
CREATE TABLESPACE g01 location 'C:\Program Files\PostgreSQL\12\data\g
01';
01';ユーザーを作成します。
CREATE USER g01 PASSWORD 'g01';
データベースを作成します。
create database g01 owner g01 tablespace g01;
gdb01へ投入します。
psql -U g01 -h test.rds.amazon.com gdb01 < g01.20191008.pdmp 2>&1 > l
og.txt
og.txtトリガー一覧
g09=> select * from pg_trigger;
トリガーが動作するテーブルの一覧
g09=> select event_object_schema
g09-> , event_object_table
g09-> , trigger_schema
g09-> , trigger_name
g09-> from information_schema.triggers
g09->;
even... | event_object_... | trig... | trigger_name
---------+------------------+---------+-----------------------
g09 | trn_employee | g09 | set_trn_employee_id_s
g09-> , event_object_table
g09-> , trigger_schema
g09-> , trigger_name
g09-> from information_schema.triggers
g09->;
even... | event_object_... | trig... | trigger_name
---------+------------------+---------+-----------------------
g09 | trn_employee | g09 | set_trn_employee_id_s
トリガー削除
g09=> drop trigger set_trn_employee_id_s on trn_employee
DROP TRIGGER
DROP TRIGGER
テーブル名を指定しないとエラーになりました。
g09=> drop trigger set_trn_employee_id_s;
ERROR: syntax error at or near ";"
行 1: drop trigger set_trn_employee_id_s;
ERROR: syntax error at or near ";"
行 1: drop trigger set_trn_employee_id_s;
ロールの確認
g09=> select * from pg_db_role_setting;
setdatabase | setrole | setconfig
-------------+---------+-----------
(0 行)
setdatabase | setrole | setconfig
-------------+---------+-----------
(0 行)
ロールがある場合は、ロールが表示されます。
g09=> select * from pg_db_role_setting;
setdatabase | setrole | setconfig
-------------+---------+---------------------
0 | 28454 | {log_statement=all}
(1 行)
setdatabase | setrole | setconfig
-------------+---------+---------------------
0 | 28454 | {log_statement=all}
(1 行)
実行されたSQLをログに出力
g09=# alter role g09 set log_statement='all';
ALTER ROLE
ALTER ROLE
権限がない場合、エラーがでます。
g09=> alter role g09 set log_statement='all';
ERROR: permission denied to set parameter "log_statement"
ERROR: permission denied to set parameter "log_statement"
ログファイルは以下のフォルダに出力されます。
C:\Program Files\PostgreSQL\9.6\data\pg_log
postgresql-2019-07-01_000000
postgresql-2019-07-01_000000
ロールの削除
g09=# alter role g09 reset log_statement;
ALTER ROLE
ALTER ROLE
コマンドプロンプトでの文字化け
g09=# \encoding sjis
コマンドラインで実行する場合、iniを変更します。
C:\Program Files\PostgreSQL\9.6\data\postgresql.conf
変更前:lc_messages = 'Japanese_Japan.932'
変更後:lc_messages = 'en_US'
変更後:lc_messages = 'en_US'
メッセージが英語で表示されるようになります。
Copyright (C) 2017 - 2020 ymlib.com
