Re: How use input parameter as path to COPY in function?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Bill Todd <pg(at)dbginc(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: How use input parameter as path to COPY in function?
Date: 2009-11-26 04:03:05
Message-ID: 21110.1259208185@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Bill Todd <pg(at)dbginc(dot)com> writes:
> I am missing something basic. How can I use an input parameter as the
> destination path in a COPY statement in a function.

plpgsql can only substitute parameter values into places where a data
value is called for in a DML statement (ie, SELECT/INSERT/UPDATE/DELETE).
To use a parameter in other contexts, such as a utility statement like
COPY, you need to construct the command as a string and EXECUTE it.
Try something like

EXECUTE 'copy dvd.genre to ' || quote_literal(export_path) ||
$q$
with
delimiter as E'\t'
null as ''
$q$ ;

(There's any number of ways to do the quoting here, of course,
but I do strongly recommend using quote_literal() on the parameter.)

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Craig Ringer 2009-11-26 04:07:18 Wiki page on vacuum full
Previous Message Bill Todd 2009-11-26 03:05:02 How use input parameter as path to COPY in function?