sql >> Database >  >> RDS >> PostgreSQL

GET DIAGNOSTICS met COPY-instructie in Pl/pgsql-functie

Nu zal GET DIAGNOSTIC het aantal rijen retourneren dat is verwerkt door de COPY-instructie in een Pl/Pgsql-functie.
COPY-instructie in de Pl/Pgsql-functie:

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;

Vorige release:

-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)

In PostgreSQL 9.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)

Dankzij de auteur ziet het er eenvoudig maar zeer effectief uit bij het laden van de gegevens met behulp van scripts en als u het aantal rijen wilt weten dat is verwerkt door de COPY-instructie.


  1. Hoe schrijf je een IF ELSE-instructie in een MySQL-query?

  2. NoSuchMethodError verkrijgen:javax.persistence.Table.indexes() tijdens het uitvoeren van een JPA-query

  3. Zoek afhankelijke objecten voor een tabel of weergave

  4. Pivot gebruiken op meerdere kolommen van een Oracle-rij