<div dir="ltr">We all use the pattern of temporary creating a function for upgrade script, declaring it (copy pasting from last script) and then calling it, then deleting it.<div><br></div><div>This very verbose can be replaced with DO instruction which does essentially the same.</div><div><br></div><div># existing declaration</div><div><br></div><div>```sql</div><div><br></div><div><div>CREATE OR REPLACE FUNCTION __tmp_count() RETURNS VOID AS</div><div>  $procedure$</div><div>  DECLARE</div><div>    i int;</div><div>  BEGIN</div><div>   i:= (select count(*) from vms)  -- useless count just for the demo</div></div><div><div>END;</div><div>  $procedure$</div><div>  LANGUAGE plpgsql;</div><div><br></div><div>SELECT __tmp_count();</div><div>DROP FUNCTION __tmp_acount();</div></div><div><br></div><div>```</div><div><br></div><div>Can be replaced with</div><div><br></div><div>```sql</div><div><br></div><div>DO $$</div><div>  DECLARE</div><div>  i int;</div><div>  BEGIN</div><div>    i := (select count(*) from vms) -- useless count for demo</div><div>  END</div><div>$$;</div><div><br></div><div>```</div><div><br></div><div>Not tested but tons of less lines to code. Exist in version 9.0.23 and above</div></div>