Contents
- VirtualBox
で共有フォルダ設定 - 共有フォルダへの読み書き権限を、PostgreSQL
ユーザに付与 - 共有フォルダへのシンボリックリンクを、PostgreSQL
のデータディレクトリに置く - PostgreSQL
再起動、動作確認
VirtualBox で共有フォルダ設定
事前に、仮想側
設定したら仮想マシンを(再)起動。下は共有フォルダ設定画面で出るツールチップですが。Auto-mount

共有フォルダへの読み書き権限を、PostgreSQL ユーザに付与
以下、ユーザ作業前後の確認を含めて、ターミナルでの具体的なコマンド例です ↓
# root権限で共有フォルダの中を見られることを確認 sudo ls /media/sf_win_r # postgresをグループに加える(必須な作業は、これだけ) sudo gpasswd -a postgres vboxsf # グループに追加されたのを確認 vboxsf:x:492:postgres のようになっていればOK cat /etc/group # postgresユーザとして、共有フォルダ内を見たりテキストを書き込めるか確認 su - postgres ls /media/sf_win_r echo 1 > /media/sf_win_r/test.txt
共有フォルダへのシンボリックリンクを、PostgreSQL のデータディレクトリに置く
これは、一つには利便性のため(対象とするファイルを相対パスで短く書ける)、もう一つの理由は# データディレクトリの場所を確認(環境によって異なる) ls /var/lib/pgsql/9.3/data # root権限でシンボリックリンクを設定(必須な作業は、これだけ) # sudo ln -s /media/sf_win_r /var/lib/pgsql/9.3/data/win_r # postgresユーザとして、シンボリックリンク経由で共有フォルダへ読み書きできるか確認 su - postgres ls /var/lib/pgsql/9.3/data/win_r echo 2 > /var/lib/pgsql/9.3/data/win_r/test.txt
以上の設定を反映するため
service postgresql-9.3 restart
PostgreSQL 再起動、動作確認
昨日psql -U postgres -p 5436
↓
SELECT pg_ls_dir('win_r');

↓ 次はもう少し実用的に、pg_read_file
SELECT pg_read_file('win_r/test.txt');



↓ 最後に、COPY ... TO
COPY (SELECT * FROM pg_tables) TO '/media/sf_win_r/pg_tables.tsv' -- TO '/var/lib/pgsql/9.3/data/win_r/pg_tables.tsv' (DELIMITER E'\t', FORMAT csv, HEADER TRUE);

