Преди PostgreSQL 9.1 INSERT/UPDATE/DELETE можеше да се използва само като оператори от най-високо ниво. Ето защо получавате синтактична грешка.
Започвайки от 9.1, можете да използвате изрази за модифициране на данни с общи таблични изрази. Вашата примерна заявка би изглеждала така:
WITH updated AS (UPDATE test SET description = 'test' RETURNING id)
SELECT * FROM test WHERE id IN (SELECT id FROM updated);
Внимавайте с избора от току-що променената таблица. По този начин можете да получите объркващи резултати. Тъй като заявките се изпълняват в една и съща моментна снимка, SELECT няма да види ефекта от оператора UPDATE.