私はpsql Postgresターミナルを使用して、次のようにCSVファイルをテーブルにインポートしてきました。
COPY tbname FROM
'/tmp/the_file.csv'
delimiter '|' csv;
実行するには psql ターミナルにログインする必要があることを除けば、正常に動作します。
Postgresが以下のようなシェルコマンドを許可するのと同様に、Linuxシェルコマンドラインからこれに似たコマンドを実行する方法を知っている人がいたら知りたいです。
/opt/postgresql/bin/pg_dump dbname > /tmp/dbname.sql
これにより、psql ターミナルにログインせずに Linux シェルからデータベースをダンプできるようになります。
ベストアンサー1
承認された回答の解決策はサーバー上でのみ機能し、クエリを実行するユーザーがファイルを読み取る権限を持っている場合にのみ機能します。このSOの答え。
それ以外の場合は、より柔軟なアプローチとして、SQLのCOPY
コマンドをpsql
の「メタコマンド」と呼ばれる\copy
どれのこれは「実際の」COPYと同じオプションをすべて取りますが、クライアント内で実行されます。;
(最後には必要ありません):
psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"
ドキュメントに従って、\copy
コマンド:
フロントエンド (クライアント) コピーを実行します。これは SQL COPY コマンドを実行する操作ですが、サーバーが指定されたファイルを読み書きする代わりに、psql がファイルを読み書きし、サーバーとローカル ファイル システム間でデータをルーティングします。つまり、ファイルのアクセス可能性と権限はサーバーではなくローカル ユーザーのものであり、SQL スーパーユーザー権限は必要ありません。
さらに、最初の行にヘッダーが含まれている場合は、上記のコマンドの最後に以下をthe_file.csv
追加することで認識できます。header
psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv header"