Sebelum PostgreSQL 9.1 INSERT/UPDATE/DELETE hanya dapat digunakan sebagai pernyataan tingkat atas. Inilah mengapa Anda mendapatkan kesalahan sintaks.
Mulai dari 9.1 Anda dapat menggunakan pernyataan modifikasi data dengan ekspresi tabel umum. Contoh kueri Anda akan terlihat seperti ini:
WITH updated AS (UPDATE test SET description = 'test' RETURNING id)
SELECT * FROM test WHERE id IN (SELECT id FROM updated);
Hati-hati dengan memilih dari tabel yang baru saja dimodifikasi. Anda bisa mendapatkan hasil yang membingungkan seperti itu. Karena kueri dieksekusi dalam snapshot yang sama, SELECT tidak akan melihat efek dari pernyataan UPDATE.