PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL - valor dinâmico como nome da tabela


Você precisará usar o PL/PgSQL EXECUTE instrução, por meio de um DO bloco ou função PL/PgSQL (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql ). SQL dinâmico não é suportado no dialeto SQL comum usado pelo PostgreSQL, apenas na variante procedural PL/PgSQL.
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;

O format(...) função %I e %L os especificadores de formato fazem o identificador adequado e as aspas literais, respectivamente.

Para literais, recomendo usar EXECUTE ... USING em vez de format(...) com %L , mas para identificadores como nomes de tabela/coluna o formato %I pattern é uma boa alternativa concisa ao verbose quote_ident chamadas.