以下は備忘録です。MySQLを使うことが多いので、PostgreSQLを久々に使って忘れていたコマンドのメモです。
データのセーブ、ロード
\COPY
メタコマンドとCOPY
コマンドを使った方法がありますが、違いとしては、以下です。
-
\COPY
コマンドはデータベース接続したクライアント側でファイルの入出力がされる -
COPY
コマンドは、PostgreSQLが稼働しているサーバー上のファイルの入出力がされる。
\COPY
コマンドを使う場合
- テーブルからファイルにデータを出力する
- この場合は、すべての項目をダブルコーテーションでくくって、ヘッダーありのcsv形式で出力してくれる。
\COPY テーブル名 TO '/path/to/file.csv' WITH CSV HEADER FORCE QUOTE *
# 以下のように任意のSQLを記述してもよい。
\COPY (SELECT カラム名1, カラム名2, FROM テーブル名 WHERE ...) TO '/path/to/file.csv' WITH CSV HEADER FORCE QUOTE *
- ファイルからテーブルにデータを読み込む
\COPY テーブル名 FROM '/path/to/file.csv' WITH CSV HEADER
COPY
コマンドを使う場合
- テーブルからファイルにデータを出力する
- この場合は、すべての項目をダブルコーテーションでくくって、ヘッダーありのcsv形式で出力してくれる。
COPY テーブル名 TO '/path/to/file.csv' WITH CSV HEADER FORCE QUOTE *;
# 以下のように任意のSQLを記述してもよい。
COPY (SELECT カラム名1, カラム名2, FROM テーブル名 WHERE ...) TO '/path/to/file.csv' WITH CSV HEADER FORCE QUOTE *;
- ファイルからテーブルにデータを読み込む
COPY テーブル名 FROM '/path/to/file.csv' WITH CSV HEADER;
パスワード設定
- 既存ユーザにパスワード設定
ALTER USER ユーザ名 WITH PASSWORD '設定するパスワード';
- 新規ユーザ作成時にパスワード設定
CREATE USER ユーザ名 WITH PASSWORD '設定するパスワード';
アクセス権限の設定
- 権限の付与(GRANT)
GRANT {ALL | SELECT | INSERT | DELETE | UPDATE} ON テーブル名 TO ユーザ名;
- 権限の剥奪(REVOKE)
REVOKE {ALL | SELECT | DELETE | UPDATE} ON テーブル名 FROM ユーザ名;
- 権限の確認
\dp
メタコマンドで確認。
postgres=# \dp
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+------------+-------+-----------------------------+-------------------+----------
public | hoge_table | table | test=arwdDxt/test+ | |
| | | hogehoge=ar/test | |
(1 row)
起動/停止、設定リロード
- 設定のリロード
$ /usr/local/bin/pg_ctl reload
- 停止
$ /usr/local/bin/pg_ctl stop
- 起動
$ /usr/local/bin/pg_ctl start
- 再起動
$ /usr/local/bin/pg_ctl restart