Get the count of rows from a COPY command

count plpgsql postgresql sqlbulkcopy

Question

When copying data from a file, you get the count of rows in psql with the "command tag":

db=# COPY t FROM '/var/lib/postgres/test.sql';
COPY 10

I need the number of rows and would like to avoid a redundant count() on the table.

Is there a way to get this count from COPY directly in a PL/pgSQL function?
As far as I know there is none, but maybe I am missing something?

For PostgreSQL 9.2. But any option in any version would be of interest.

Accepted Answer

Not in PG 9.2, but there is in PG 9.3 courtesy of Pavel (E 1.3.1.7):

Allow PL/pgSQL to access the number of rows processed by COPY (Pavel Stehule)

The command is GET DIAGNOSTICS x = ROW_COUNT.

http://www.postgresql.org/docs/devel/static/release-9-3.html



Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why