Re: Add COPY statement inside sql function AND/OR call function within function

From: Adrian Klaver <adrian(dot)klaver(at)gmail(dot)com>
To: Johannes Björk <bjork(dot)johannes(at)gmail(dot)com>, pgsql-general(at)postgresql(dot)org
Subject: Re: Add COPY statement inside sql function AND/OR call function within function
Date: 2013-11-16 01:12:20
Message-ID: 5286C674.9040004@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 11/12/2013 12:56 PM, Johannes Björk wrote:
> Hi, Im hoping someone could help me with this. I am new to any kind of
> sql coding so bare with me.
>
> I have written the below working function which I would like to print to
> .csv file(s)
>
> |CREATE FUNCTION retrieve_info(input_method TEXT, input_species TEXT) RETURNS SETOF
> retrieve_info_tblAS $$
> SELECT tblA.id, tblA.method, tblA.species, tblA.location
> FROM tblA
> WHERE method=input_methodAND species=input_species
> GROUP BY id, method, species
> ORDER BY location
> $$ LANGUAGE'sql';|
>
>
> *DUMMY DATA*
>
> tblA (filled)
>
> |create table tblA(id varchar(5) PRIMARY KEY, method text, species varchar(10), location
> text);
> insert into tblAvalues ('1a', 'mtd1', 'sp1', 'locA'),('1b', 'mtd1', 'sp2', 'locC'),('1c',
> 'mtd2', 'sp3', 'locB'),('1d', 'mtd1', 'sp1', 'locB'),('1e', 'mtd2', 'sp5', 'locA');|
>
> retrieve_info_tbl (empty)
>
> |create table retrieve_info_tbl(id varchar(5) PRIMARY KEY, method text, ind varchar(10),
> location text);|
>
> Calling function
>
> |SELECT * FROM retrieve_info('mtd1','sp1');|
>
> *OUTPUT*
>
> |retrieve_info(mtd1, sp3)
>
> id| method| ind| location
> ----------------------------
> 1a| mtd1| sp3| locA
> 1d| mtd1| sp3| locB|
>
>
> Since I have not succeeded in this, I tried to work around it creating a
> function which called this function and printed the result to a .csv file.

It looks like it is succeeding, it returns a setof. What are you looking
to do?

>
> |CREATE FUNCTION print_out(x TEXT, y TEXT) RETURNS voidAS $$
> COPY(SELECT * FROM retrieve_info(x,y)) TO 'myfilepath/test.csv'
> WITH CSV HEADER;
> $$ LANGUAGE'sql';|
>
> Calling nested function.
>
> |SELECT * FROM print_out('mtd1','sp1');|
>
> |
>
> *OUTPUT*
>
> The above gives this |ERROR: column "x" does not exist SQL state: 42703
> Context: SQL function "print_out" statement 1|. However, when
> substituting x,y in print_out() with 'mtd1','sp1' the correct output is
> printed to test.csv
>
> I would really appreciate any pointers on either one of the above problems.

>
> Many thanks,
>
> Johannes
>
> |

--
Adrian Klaver
adrian(dot)klaver(at)gmail(dot)com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Jayadevan M 2013-11-16 03:14:52 log_line_prefix
Previous Message Felipe Gasper 2013-11-16 00:19:19 PGSQL: listing db/role and user/role relationships