copyと\copy
copyと\copyで挙動が変わる。
copy
コマンドはサーバー側、つまりLinuxのユーザpostgres
で実行される。file.csv
に対してpostgres
ユーザーの権限がないとエラーになる。
NG
db=# copy split from 'file.csv' with csv;
ERROR: ファイルを読み取り用にオープンできませんでした: 許可がありません
\copy
コマンドはクライアント側、psql
を実行しているユーザーの権限で実行される。file.csv
に対してpsql
を実行しているユーザーの権限があれば実行できる。
OK
db=# \copy split from 'file.csv' with csv;
外部接続
二段階の認証になっていて、2つの設定ファイルがある
- pg_hba.conf
- データベースやユーザ単位で設定できる
- postgresql.conf
- IPアドレスで接続元を制限する
pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# localは同一ホスト内通信
local all all peer
# 以下TYPEがhostなのでTCP/IPの設定
host all all 127.0.0.1/32 trust
METHOD | 意味 |
---|---|
trust | 認証なし |
peer | postgresqlのユーザー名とlinuxのユーザー名が同じでないと拒否する |
md5 | md5(ハッシュ値)を使ったパスワード認証 |