sql >> データベース >  >> RDS >> PostgreSQL

動的ファイル名でコピー

    動的SQLが必要です :

    CREATE OR REPLACE FUNCTION loaddata(filepathname text)
      RETURNS void AS
    $func$
    BEGIN
       EXECUTE format ('
       COPY climatedata(
             climatestationid
           , date
             ... -- more columns 
           , tminsflag)
       FROM %L (FORMAT CSV, HEADER)'  -- current syntax
               -- WITH CSV HEADER'    -- tolerated legacy syntax
       , $1);  -- pass function parameter filepathname to format() 
    END
    $func$ LANGUAGE plpgsql;
    

    format() PostgreSQL 9.1以降が必要です。
    (エスケープされた)一重引用符を追加せずにファイル名を渡します:

    SELECT loaddata('/absolute/path/to/my/file.csv')
    

    format() %Lを使用 ファイル名を安全にエスケープします。 SQLインジェクションの影響を受けやすい それなしで。

    、関数名が一致していません:

    CREATE OR REPLACE FUNCTION public.loaddata(filepathname varchar)
    ...
    ALTER FUNCTION public.filltmaxa(character varying)



    1. SQL Serverの列のデータ型をどのように変更しますか?

    2. データベース設計でのさまざまなMySQLストレージエンジンの使用

    3. PostgresJSON配列に文字列が含まれているかどうかを確認します

    4. cd:-M:無効なオプション