Redshift INSERT INTO TABLE from CTE

fez picture fez · Jan 18, 2016 · Viewed 10.2k times · Source

According to the Redshift WITH Clause documentation, you can use a WITH clause with a INSERT INTO...SELECT statement. However when testing this, I am getting the below error. Is this not possible, or do I have the syntax wrong?

CREATE TABLE TestCTEInsert (SomeTimestamp TIMESTAMP);
WITH CTE AS
(SELECT GETDATE() as SomeTimestamp)
INSERT INTO TestCTEInsert
    (SomeTimestamp) SELECT SomeTimestamp from CTE;

ERROR: 42601: syntax error at or near "insert"

Interestingly, it does support inserting into a new table i.e.

WITH CTE AS
(SELECT GETDATE() as SomeTimestamp)
INSERT SomeTimestamp INTO NewTable 
SELECT SomeTimestamp from CTE;

The command completed successfully (1 rows affected)

EDIT: Just to confirm, I get the same error when using an INTEGER column rather than TIMESTAMP:

CREATE TABLE TestCTE (SomeInt INTEGER);
WITH CTE AS
(SELECT 1 as SomeInt)
INSERT INTO TestCTEInsert 
SELECT SomeInt from CTE;

ERROR: 42601: syntax error at or near "insert"

Answer

Adeeb Armalite picture Adeeb Armalite · Jan 18, 2016

Try putting the CTE in the insert (not sure if that beats the point)

INSERT INTO TestCTEInsert
WITH CTE AS
(SELECT CURRENT_TIMESTAMP as SomeTimestamp)
SELECT SomeTimestamp from CTE;