J'ai essayé de simuler mon problème dans l'exemple de code ci-dessous. Dans le code ci-dessous, je fais un select * from test
dans une procédure. Comme nous le savons, nous devons utiliser le mot-clé perform
pour cela. Cela fonctionne très bien:Postgres plpgsql avec des requêtes PERFORM CTE
perform * from test;
Cependant, si j'essaie de réécrire cette simple requête en CTE, je n'arrive pas à la faire fonctionner. Je reçois une erreur de syntaxe.
with test_as_cte as(select * from test) perform * from test_as_cte;
Est-ce possible? Quelle est la syntaxe correcte? J'ai essayé plusieurs alternatives et en passant par la documentation, mais sans succès jusqu'à présent.
(.. S'il vous plaît noter que ceci est juste un exemple pour expliquer mon problème, je sais que les requêtes ne font pas vraiment de sens)
create table test
(
key int primary key
);
create function test() returns trigger as
$$
begin
raise notice 'hello there';
-- this does work
perform * from test;
-- this doesn't work
with test_as_cte as(select * from test) perform * from test_as_cte;
return new;
end;
$$
language plpgsql;
create trigger test after insert on test for each row execute procedure test();
insert into test(key) select 1;
Merci. Cela fonctionne en effet. Le problème est que j'ai un peu trop abstrait. Je vais poser une nouvelle question. –
Je dois attendre 90 minutes apparemment :). Je vais l'ajouter plus tard aujourd'hui. Merci encore. –
Voir ici: https://stackoverflow.com/questions/44908442/postgres-plpgsql-with-perform-data-modifying-cte-queries –