Possible Duplicate:
Postgres Dynamic Query Function
I wish to use the returned string from the query below as a table name for other query.
SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')
as you can see it returns a string. I wish to use it as an input for another query, e.g.
CREATE TABLE (SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')) AS * SELECT FROM backup
Can it be done? Any clue how?
You will need to use the PL/PgSQL EXECUTE
statement, via a DO
block or PL/PgSQL function (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
). Dynamic SQL is not supported in the ordinary SQL dialect used by PostgreSQL, only in the procedural PL/PgSQL variant.
DO $$ BEGIN EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd')); END; $$ LANGUAGE plpgsql;
The format(...)
function's %I
and %L
format-specifiers do proper identifier and literal quoting, respectively.
For literals I recommend using EXECUTE ... USING
rather than format(...)
with %L
, but for identifiers like table/column names the format %I
pattern is a nice concise alternative to verbose quote_ident
calls.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With