実現したい事
PL/pgSQLを勉強中の者です。
現在PL/PgSqlにてテーブルの内容をファイルに出力するファンクション機能を作成中です!
当初copyコマンドを用いての実装を試みていたのですが上手く行かず、
【参考】
https://dba.stackexchange.com/questions/222544/why-doesnt-copy-work-when-called-from-a-pl-pqsql-function
のサイトにある通り
「\copyはpsql命令であり、PL/pgSQLコマンドではありません。」とあるため、何か他にやり方が無いか模索中です。
PL/SqlのようにCursorでテーブル内容を拾いUTL_FILEで書き込む方法も探してみたのですが
【参考】
https://stackoverflow.com/questions/41267288/utl-file-in-pl-pgsql
PL/PgSqlにはUTL_FILEパッケージが無いためやはり不可能のようです...
何かPL/pgSQLのファンクションにてファイルへ書き込み、出力が出来る方法をご存じの方がおりましたらアドバイスお願いします!
直接テーブルの内容を出力できなくても変数の内容等が出力できれば良いです。(テーブルの内容はカーソルで変数に落とし込めるので...)
追記
現在以下のように実行を試みていますが権限関連のエラーが出てしまいます...(対象のtest.txtはフルコントロールにしてあります)
CREATE OR REPLACE FUNCTION public.TEST( IN out_fph text ) RETURNS void AS $$ BEGIN EXECUTE ' COPY (SELECT testcaolumn FROM testtable) TO ''' || out_fph || ''' ' ; END ; $$ language plpgsql VOLATILE ;
SELECT TEST('C:\Users\XXX\test.txt'); ERROR: could not open file "C:\Users\XXX\test.txt" for writing: Permission denied HINT: COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \copy. CONTEXT: SQL statement " COPY (SELECT testcaolumn FROM testtable) TO 'C:\Users\XXX\test.txt'' " PL/pgSQL function TEST(text) line 5 at EXECUTE
pl/pgSqlで書きたいとのことですが、psqlコマンド上での実行なのか、別な処理系からの呼び出しなのか、想定している実行環境についても教えて下さい。
実行環境としてはpsqlのコマンド(自分の環境ではsql_shell)上で実行を想定しています。
引数無しの関数として実装し呼び出すと予め設定されている内
容をファイルに書き出すようなイメージのものを作成する予定です。
実行環境としてこの説明で良いでしょうか...?
あなたの回答
tips
プレビュー