sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL:valor dinámico como nombre de tabla

Deberá utilizar PL/PgSQL EXECUTE declaración, a través de un DO bloque o función PL/PgSQL (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql ). SQL dinámico no es compatible con el dialecto de SQL ordinario que utiliza 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;

El format(...) %I de la función y %L los especificadores de formato hacen un identificador adecuado y citas literales, respectivamente.

Para literales recomiendo usar EXECUTE ... USING en lugar de format(...) con %L , pero para identificadores como nombres de tablas/columnas el formato %I el patrón es una buena alternativa concisa al detallado quote_ident llamadas.