id、name、および複雑なクエリを含む1つのテーブルがあります。以下はその表のほんの一例です。
ID name Query
1 advisor_1 "Select * from advisor"
2 student_1 "Select * from student where id = 12"
3 faculty_4 "Select * from student where id = 12"
このテーブルを繰り返し処理して、各レコードをcsvファイルに保存したい
匿名ブロックで自動的にできる方法はありますか?テーブルには多くの行があるため、これを手動で実行したくありません。
誰か助けてもらえますか?
スーパーユーザーでないということは、サーバー側のDOブロックでエクスポートを実行できないことを意味します。
データベースと通信できる任意のプログラミング言語でクライアント側で実行できます。または、psqlのみの環境を想定する\copy
と、SQLクエリを使用してステートメントのリストを生成できます。
後者の例として、一意の出力ファイル名がID
列から作成されていると仮定すると、次のようなものが機能するはずです。
SELECT format('\copy (%s) TO ''file-%s.csv'' CSV', query, id)
FROM table_with_queries;
このクエリの結果は、次のようにpsqlに直接含めることができる形式でファイルに配置する必要があります。
\pset format unaligned
\pset tuples_only on
-- \g with an argument treats it as an output file.
SELECT format('\copy (%s) TO ''file-%s.csv'' CSV', query, id)
FROM table_with_queries \g /tmp/commands.sql
\i /tmp/commands.sql
ちなみに、そのプロセスは、それ自体がメタコマンドである\gexec
ため、PG9.6で導入されたメタコマンドでは管理できません\copy
。\gexec
メタコマンドではなく、SQLクエリでのみ反復します。それ以外の場合は、1回の\gexec
呼び出しですべてを実行できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加