GROUP BY CUBE – experiences

PG 9.5 brought very useful addition to GROUP BY clause – CUBE. With CUBE you can get in very simple way aggregated results over all possible combinations of columns enlisted in CUBE. But everything has its price – so here are some experiences with CUBE....

For loop over VALUES

do $$ declare i int; j int; begin for i,j in (values(1,2),(2,3),(3,4))  loop raise NOTICE '%, %', i,j; end loop; end; $$

How to find column names of variable type record in PL/pgSQL

Language PL/pgSQL has one big disadvantage when you work with variable of type “record”. You cannot easily iterate over record columns because in this language record is not handled as “hashed” record like in JavaScript or Python etc....

How to get DDL for table from PostgreSQL

So many people in PostgreSQL forums and mail lists do not understand why the hell should someone need to get DDL for table directly in PL/pgSQL. Everyone keeps recommend pg_dump. Well if you are one of them just skip this text. On the other hand if you also have this...

Drop all versions of a function

Do you need to drop all existing versions of some function without knowing anything about parameters? Try this: do $$ declare _rec record; begin for _rec in select 'drop function if exists '||ns.nspname||'.'||p.proname||'('||pg_catalog.<tt...

Usage of arrays in aggregations

If you get to know them you will simply love them – I mean ARRAYs in PostgreSQL. And also in some situations you simply cannot live without them – at least in PostgreSQL. Here are some examples how to use them in real life. (still in TODO) Aggregations...