ここでpostgresをいじっているかもしれませんが、基本的に、私がやりたいことは、文字列変数を取り、それをpsqlのみを使用してsqlコマンド(この場合はCOPY)に渡すことです。
これが私が思いついたものです。他の状況で mydb_functions を使用できるようにするため、コマンドは 2 つのファイルに分割されています。
ファイル 1: mydb_functions--1.0.sql (share/extension で、mydb_functions.control を使用して、マニュアルに記載されているようにセットアップも行います。ファイル名を指定すると、完全なファイルパスが返されます。これは、以下の add_data.sql で COPY ステートメントを作成するためだけに行われます。 、きれいに。
CREATE OR REPLACE FUNCTION fpn(filename text) RETURNS TEXT as '
DECLARE
mypath text := ''/path/to/my/directory/'';
BEGIN
RETURN mypath || filename;
END
' LANGUAGE plpgsql;
ファイル 2: add_data.sql 。これは、コマンド ラインで psql を使用して既存の postgres テーブルにデータをコピーするためだけに存在します。注: CREATE EXTENSION コマンドのため、スーパーユーザー権限で psql を実行する必要があります。
CREATE EXTENSION IF NOT EXISTS mydb_functions;
-- haven't figured out how to create a function without arguments yet.
CREATE OR REPLACE FUNCTION test (dummyvar text) RETURNS text as '
DECLARE
filepath RECORD;
BEGIN
SELECT * INTO filepath from fpn(''mydatafile.data'');
COPY tablename (columnname) FROM filepath;
END
' LANGUAGE plpgsql;
私が立ち往生している部分は、ファイルパスレコードからテキストを抽出して COPY コマンドで使用する方法です。これを達成するためのより簡単な方法に関するヒントも大歓迎です。変数を格納するためのテーブルを作成することは、これよりもはるかに簡単だと思います。しかし、私は最後のステップを完了したいと思います。