1、2、3 .... 100.csvという名前の100個のcsvファイルがあります。
次のスクリプトでcsvファイルをコピーします。
COPY location FROM 'C:\Program Files\PostgreSQL\9.5\data\´1.csv' DELIMITER ',';
すべてのファイル(1,2,3 .... 100.csv)をカバーする単一のスクリプトでCOPYを実行します。
MS WindowsでpgadminIIIを使用しています
pgScript を使用できます:
DECLARE @i, @filename;
SET @i = 1;
WHILE @i <= 100
BEGIN
SET @filename = 'C:\\Program Files\\PostgreSQL\\9.5\\data\\' + CAST(@i AS STRING) + '.csv' ;
COPY location FROM '@filename' DELIMITER ',' ;
SET @i = @i + 1;
END
注:禁止PostgreSQLデータディレクトリにCSVファイルを配置します。このディレクトリは、ユーザーではなく、データベースエンジンが使用するためのものです。 PostgreSQLファイルを誤って上書きまたは削除すると、データベースが役に立たなくなる可能性があります。
C:\Users\user\Documents\CSV\...
または "userland"内の同様の場所のどこかにファイルを保持し、PostgreSQLプロセスが読み取るための適切な権限をそのディレクトリに付与する必要があります。このバージョンの標準インストールでは、通常 LocalSystem アカウントに読み取り権限を与える必要があります。一部のインストールではPostgresアカウントを使用できます)。
注2:pgScriptはそれほど魅力がありませんでした。 pgAdmin 4には移植されていません。
また、plpgsql匿名ブロックを使用してこれを行うことができるはずです。
do $block$
declare
r record;
BEGIN
for r in select generate_series(1,100) n
loop
execute $$COPY location FROM 'C:\Program Files\PostgreSQL\9.5\data\$1.csv' DELIMITER ','$$ using r.n;
end loop;
end$block$;
私はこれをCOPYでテストしていませんが、ループが動作している これはdbfiddleです です。
これを行うためのコーシャの方法は、シェルを使用することです。 pgScript
全体は、pgAdminの機能が多すぎるようです。 pgScriptはpgAdmin IVにも含まれているようですので、購入者は注意してください。
for i in $(seq 1 100);
do psql -d database -e 'COPY ...';
end;
Windowsを使用している場合は、次のいずれかを行うことができます
そうは言っても、私は@joanoloに同意します。 CSVをデータディレクトリに配置するのはcomically悪いです。通常の状況では、CSVがサーバーに送信されることはありません。彼らはクライアントにとどまります。そして、PSQLの\COPY
を使用できます。そうは言っても、ロックダウンされたFTPサーバーがSQLサーバーであり、それが理にかなっている場合もありますが、通常、COPY
ではなく\COPY
を使用し、シェルでこの種のループを実行する必要があります。
PostgreSQL 9.2はDO
を追加しました。これはサーバー上でスクリプトを提供するようです。あなたが本当にスクリプトを書きたかったなら。私はあなたがあなたのサーバーでネイティブに実行する何かを書くことができると確信しています。 pg_ls_dir
の関数を参照して、dirをループします。