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.