tablas insertar funciones ejemplo desde datos crear consultas consola comandos cero aprender sql postgresql postgresql-9.1 dynamic-sql

insertar - funciones en postgresql ejemplo



PostgreSQL-valor dinĂ¡mico como nombre de tabla (1)

Posible duplicado:
Función de consulta dinámica de Postgres

Deseo usar la cadena devuelta de la consulta a continuación como un nombre de tabla para otra consulta.

SELECT ''backup_'' || TO_CHAR(CURRENT_DATE,''yyyy-mm-dd'')

Como puedes ver, devuelve una cadena. Deseo usarlo como entrada para otra consulta, por ejemplo,

CREATE TABLE (SELECT ''backup_'' || TO_CHAR(CURRENT_DATE,''yyyy-mm-dd'')) AS * SELECT FROM backup

Se puede hacer? ¿Alguna pista de cómo?


Deberá utilizar la instrucción PL / PgSQL EXECUTE , a través de un bloque DO o una función PL / PgSQL ( CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql ). El SQL dinámico no es compatible con el dialecto SQL ordinario utilizado por PostgreSQL, solo en la variante de procedimiento PL / PgSQL.

DO $$ BEGIN EXECUTE format(''CREATE TABLE %I AS SELECT * FROM backup'', ''backup_'' || to_char(CURRENT_DATE,''yyyy-mm-dd'')); END; $$ LANGUAGE plpgsql;

Los especificadores de formato %I y %L función format(...) hacen el identificador correcto y la cita literal, respectivamente.

Para literales, recomiendo usar EXECUTE ... USING lugar de format(...) con %L , pero para identificadores como los nombres de tabla / columna, el patrón de formato %I es una buena alternativa concisa para las llamadas a quote_ident verbose.