0

PostgreSQL にシステム パスを格納する適切な場所を見つけようとしています。

私がやろうとしているのは、COPY コマンドを使用して値をテーブルにロードすることです。ただし、定期的に同じファイル パスを参照するため、そのパスを 1 か所に格納したいと考えています。適切なパスを返す関数を作成しようとしましたが、COPY コマンドで関数を呼び出すと構文エラーが発生します。これが正しい方法かどうかはわかりませんが、とにかくコードを投稿します。

コピー コマンド:

COPY employee_scheduler.countries (code, name)
    FROM get_csv_path('countries.csv')
    WITH CSV;

関数の定義:

CREATE OR REPLACE FUNCTION
    employee_scheduler.get_csv_path(IN file_name VARCHAR(50))
    RETURNS VARCHAR(250) AS $$
DECLARE
    path VARCHAR(200) := E'C:\\Brian\\Work\\employee_scheduler\\database\\csv\\';
    file_path VARCHAR(250) := '';
BEGIN
   file_path := path || file_name;
   RETURN file_path;
END;
$$ LANGUAGE plpgsql;

これを達成する方法について誰かが別の考えを持っている場合、私は提案を受け付けています。

アップデート:

私が受け取っているエラーは次のとおりです。

エラー: 「employee_scheduler」またはその付近で構文エラーが発生しました LINE 12: FROM employee_scheduler.get_csv_path('countries.csv')

次のステートメントを試してみましたが、うまくいきませんでした。

COPY employee_scheduler.countries (code, name)
    FROM employee_scheduler.get_csv_path('countries.csv')
    WITH CSV;

COPY employee_scheduler.countries (code, name)
    FROM (employee_scheduler.get_csv_path('countries.csv'))
    WITH CSV;

COPY employee_scheduler.countries (code, name)
    FROM (SELECT * FROM employee_scheduler.get_csv_path('countries.csv'))
    WITH CSV;

これを達成しようとしている方法は不可能だと思い始めています。他の誰かがこれを達成する方法について何か考えを持っていますか? copyステートメントを使用したい場合は、どこにでもパスをハードコーディングする必要があるかもしれません...

助けてくれてありがとう。

4

2 に答える 2

1

これは正しい方法ではありません。Copy コマンドで Function を呼び出しても役に立ちません。

以下のように関数 a を作成して実行可能にします。 CREATE OR REPLACE FUnction copy_data(filename text) return int as $$ declare cmd text; cmd:='copy test_copy from '||''''||get_csv(filename)||''''||' を開始します 区切り文字 '||''''||','||''''||';'; を使用します。cmd return 1 を実行します。終わり; $$ 言語 plpgsql;

于 2010-05-23T15:10:26.227 に答える
0

あなたの機能は正常に動作します。ただし、 (私が間違っていない限り)employee_scheduler.get_csv_path('countries.csv')ただの代わりに言う必要があります。get_csv_path('countries.csv')psql でこれを試して、動作することを確認してください。

=> SELECT employee_scheduler.get_csv_path('countries.csv');
                        get_csv_path                         
-------------------------------------------------------------
 C:\Brian\Work\employee_scheduler\database\csv\countries.csv
(1 row)
于 2010-05-21T21:45:02.447 に答える