Re: [GENERAL] how to pass tablename to a function
-Original Message- From: pgsql-general-ow...@postgresql.org [mailto:pgsql-general-ow...@postgresql.org] On Behalf Of alecinvan Sent: Thursday, September 04, 2014 6:28 PM To: pgsql-general@postgresql.org Subject: [GENERAL] how to pass tablename to a function Hi, All I like to pass the tablename to function but not using execute clause, here is my script CREATE OR REPLACE FUNCTION functions.pgsql_event_unpack_batch(IN _tbl text, IN jobid bigint, IN jobtime timestamp with time zone, IN startid bigint, IN stopid bigint) RETURNS TABLE(events bigint, errors bigint[]) AS $BODY$ BEGIN RETURN QUERY WITH unpacking (raw_id, time, userid, eventtype, pagename, userhost, application, status, error) AS ( select id as raw_id, (up).time, (up).userid, coalesce((up).eventtype, ''), coalesce((up).pagename, ''), (up).userhostaddress as userhost, coalesce((up).application, ''), (up).status, (up).error from( select id, functions.python_events_unpack(event_object) up from _tbl where id between startid and stopid ) a where (up).userid is not NULL ) I want to pass the _tbl to the select query integrated in the unpacking(), how can I make it? thanks Alec You can't. You have to use dynamic sql (EXECUTE). Regards, Igor Neyman -- Sent via pgsql-general mailing list (pgsql-general@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general
[GENERAL] how to pass tablename to a function
Hi, All I like to pass the tablename to function but not using execute clause, here is my script CREATE OR REPLACE FUNCTION functions.pgsql_event_unpack_batch(IN _tbl text, IN jobid bigint, IN jobtime timestamp with time zone, IN startid bigint, IN stopid bigint) RETURNS TABLE(events bigint, errors bigint[]) AS $BODY$ BEGIN RETURN QUERY WITH unpacking (raw_id, time, userid, eventtype, pagename, userhost, application, status, error) AS ( select id as raw_id, (up).time, (up).userid, coalesce((up).eventtype, ''), coalesce((up).pagename, ''), (up).userhostaddress as userhost, coalesce((up).application, ''), (up).status, (up).error from( select id, functions.python_events_unpack(event_object) up from _tbl where id between startid and stopid ) a where (up).userid is not NULL ) I want to pass the _tbl to the select query integrated in the unpacking(), how can I make it? thanks Alec -- View this message in context: http://postgresql.1045698.n5.nabble.com/how-to-pass-tablename-to-a-function-tp5817861.html Sent from the PostgreSQL - general mailing list archive at Nabble.com. -- Sent via pgsql-general mailing list (pgsql-general@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general
Re: [GENERAL] how to pass tablename to a function
alecinvan wrote > I like to pass the tablename to function but not using execute clause, > here is my script > > [...] > > I want to pass the _tbl to the select query integrated in the unpacking(), > how can I make it? There is no way to perform a query with an unknown, at design time, identifier without using EXECUTE. The recommended way to do this is to use "format()" and dollar-quoting - v9.1+ required: v_qry := format( $qry$ WITH [...] SELECT id, func(...) FROM %I WHERE id [...] $qry$ , _tbl ); RETURN QUERY EXECUTE v_qry; David J. -- View this message in context: http://postgresql.1045698.n5.nabble.com/how-to-pass-tablename-to-a-function-tp5817864p5817871.html Sent from the PostgreSQL - general mailing list archive at Nabble.com. -- Sent via pgsql-general mailing list (pgsql-general@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general
Re: [GENERAL] how to pass tablename to a function
On 09/04/2014 04:42 PM, A L. wrote: Hi, All I like to pass the tablename to function but not using execute clause, here is my script CREATE OR REPLACE FUNCTION functions.pgsql_event_unpack_batch(IN _tbl text, IN jobid bigint, IN jobtime timestamp with time zone, IN startid bigint, IN stopid bigint) RETURNS TABLE(events bigint, errors bigint[]) AS $BODY$ BEGIN RETURN QUERY WITH unpacking (raw_id, time, userid, eventtype, pagename, userhost, application, status, error) AS ( select id as raw_id, (up).time, (up).userid, coalesce((up).eventtype, ''), coalesce((up).pagename, ''), (up).userhostaddress as userhost, coalesce((up).application, ''), (up).status, (up).error from( select id, functions.python_events_unpack(event_object) up from _tbl where id between startid and stopid ) a where (up).userid is not NULL ) I want to pass the _tbl to the select query integrated in the unpacking(), how can I make it? Assuming you are using plpgsql, see here: http://www.postgresql.org/docs/9.3/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN or use a language like plpythonu. thanks Alec -- Adrian Klaver adrian.kla...@aklaver.com -- Sent via pgsql-general mailing list (pgsql-general@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general
[GENERAL] how to pass tablename to a function
Hi, All I like to pass the tablename to function but not using execute clause, here is my script CREATE OR REPLACE FUNCTION functions.pgsql_event_unpack_batch(IN _tbl text, IN jobid bigint, IN jobtime timestamp with time zone, IN startid bigint, IN stopid bigint) RETURNS TABLE(events bigint, errors bigint[]) AS $BODY$ BEGIN RETURN QUERY WITH unpacking (raw_id, time, userid, eventtype, pagename, userhost, application, status, error) AS ( select id as raw_id, (up).time, (up).userid, coalesce((up).eventtype, ''), coalesce((up).pagename, ''), (up).userhostaddress as userhost, coalesce((up).application, ''), (up).status, (up).error from( select id, functions.python_events_unpack(event_object) up from _tbl where id between startid and stopid ) a where (up).userid is not NULL ) I want to pass the _tbl to the select query integrated in the unpacking(), how can I make it? thanks Alec