Trước PostgreSQL 9.1, INSERT / UPDATE / DELETE chỉ có thể được sử dụng như các câu lệnh cấp cao nhất. Đây là lý do tại sao bạn gặp lỗi cú pháp.
Bắt đầu từ 9.1, bạn có thể sử dụng các câu lệnh sửa đổi dữ liệu với các biểu thức bảng phổ biến. Truy vấn mẫu của bạn sẽ giống như sau:
WITH updated AS (UPDATE test SET description = 'test' RETURNING id)
SELECT * FROM test WHERE id IN (SELECT id FROM updated);
Hãy cẩn thận với việc chọn từ bảng vừa sửa đổi. Bạn có thể nhận được kết quả khó hiểu theo cách đó. Vì các truy vấn được thực thi trong cùng một ảnh chụp nhanh, SELECT sẽ không thấy các tác động của câu lệnh UPDATE.