PostgreSQL メモ

PostgreSQL

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

ユーザーgsys
パスワード入力
データベース名g09

テーブル一覧 (\dt)

g09=> \dt;
                      リレーションの一覧
 スキーマ |              名前              |    型    | 所有者
----------+--------------------------------+----------+--------
 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"()

データベース一覧と文字コードの表示 (\l)

g09=> \l
                                       データベース一覧
   名前    |  所有者   | エンコーディング |  照合順序   | 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

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 -Fp -s -U g01 gdb01 > C:\temp\gdb01.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

ダンプファイルを開いて09を01へ置換します。

データフォルダを作成します。 PostgreSQLのバージョンによってパスが違います。

C:\Program Files\PostgreSQL\12\data\g01

テーブルスペースを作成します。

CREATE TABLESPACE g01 location 'C:\Program Files\PostgreSQL\12\data\g
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

トリガー一覧

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=> drop trigger set_trn_employee_id_s on trn_employee
DROP TRIGGER

テーブル名を指定しないとエラーになりました。

g09=> 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 行)

ロールがある場合は、ロールが表示されます。

g09=> select * from pg_db_role_setting;
 setdatabase | setrole |      setconfig
-------------+---------+---------------------
           0 |   28454 | {log_statement=all}
(1 行)

実行されたSQLをログに出力

g09=# alter role g09 set log_statement='all';
ALTER ROLE

権限がない場合、エラーがでます。

g09=> alter role g09 set log_statement='all';
ERROR:  permission denied to set parameter "log_statement"

ログファイルは以下のフォルダに出力されます。

C:\Program Files\PostgreSQL\9.6\data\pg_log
postgresql-2019-07-01_000000

ロールの削除

g09=# alter role g09 reset log_statement;
ALTER ROLE

コマンドプロンプトでの文字化け

g09=# \encoding sjis

コマンドラインで実行する場合、iniを変更します。

C:\Program Files\PostgreSQL\9.6\data\postgresql.conf

変更前:lc_messages = 'Japanese_Japan.932'
変更後:lc_messages = 'en_US'

メッセージが英語で表示されるようになります。

▲ PageTop  ■ Home


Copyright (C) 2017 - 2020 ymlib.com