Existe um comando antigo e obsoleto no PostgreSQL que antecede CREATE TABLE AS SELECT
(CTAS) chamadoSELECT ... INTO .... FROM
, ele suporta WITH
cláusulas/Common Table Expressions (CTE). Então, por exemplo, eu posso fazer isso..
WITH w AS (
SELECT *
FROM ( VALUES (1) ) AS t(x)
)
SELECT *
INTO foo
FROM w;
Mas, eu não posso fazer isso..
WITH w AS (
SELECT *
FROM ( VALUES (1) ) AS t(x)
)
CREATE TABLE foo AS
SELECT * FROM w;
Ou, eu recebo
ERROR: syntax error at or near "CREATE"
LINE 5: CREATE TABLE foo AS
Como eu faria isso usando a sintaxe CTAS padronizada.
Pode ser estranho, mas você precisa mover a
WITH
cláusula do topo para a consulta. É uma parte da instrução para gerar a tabela, e essa instrução vem depois doCREATE TABLE
, então você usaria essa sintaxe.Também vale a pena notar que não é explícito nos documentos oficiais, apenas se enquadra na consulta
Os documentos mencionam dois outros casos de uso para a palavra-
WITH
chave,storage_options
NO DATA
Você pode ver os dois em uso assim,
Agora você tem uma mesa sem nada.