Pl / Pgsql関数のCOPYステートメント:
CREATE OR REPLACE FUNCTION public.copy_data(fname text) RETURNS integer
AS
$$
declare
copy_qry text;
cnt integer;
Begin
copy_qry := 'copy t from'||quote_literal(fname)||' with CSV HEADER;';
Execute copy_qry;
GET DIAGNOSTICS cnt = ROW_COUNT;
return cnt;
end;
$$ Language plpgsql;
以前のリリース:
-bash-4.1$ psql>
psql.bin (9.2.3)
Type "help" for help.
postgres=# select copy_data('/usr/local/pg93beta/t_load.csv');
copy_data
-----------
0
(1 row)
PostgreSQL9.3の場合
-bash-4.1$ ./psql -p 5555
psql (9.3beta1)
Type "help" for help.
postgres=# select copy_data('/usr/local/pg93beta/t_load.csv');
copy_data
-----------
3
(1 row)
or
-bash-4.1$ ./psql -p 5555 -c "select copy_data('/usr/local/pg93beta/t_load.csv');"
copy_data
-----------
3
(1 row)
著者のおかげで、スクリプトを使用してデータをロードする場合はシンプルですが非常に効果的であり、COPYステートメントによって処理される行数を知りたいと考えています。