pg_protobuf: Protobuf support for PostgreSQL
Yesterday I had a few spare hours (I was waiting for 'Star Wars VIII' movie session, which BTW turned out to be great) so I decided to implement one idea I had in mind for quite some time. The idea is to add support of Protobuf datatype to PostgreSQL.
The result can be found on GitHub. Here is a short example from README.md:
create extension pg_protobuf; create table heroes (x bytea); insert into heroes values (E'\\x0a0365617810321880022202100f'), (E'\\x0a07616669736b6f6e10191880082a060a0200011064') -- ... ; create function hero_name(x bytea) returns text as $$ begin return protobuf_get_string(x, 1); end $$ language 'plpgsql' immutable; create function hero_hp(x bytea) returns text as $$ begin return protobuf_get_integer(x, 2); end $$ language 'plpgsql' immutable; create function hero_xp(x bytea) returns text as $$ begin return protobuf_get_integer(x, 3); end $$ language 'plpgsql' immutable; create index hero_name_idx on heroes using btree(hero_name(x)); select protobuf_decode(x) from heroes where hero_name(x) = 'afiskon';
The extension seems to work and pass basic tests, however more thorough testing is required which I'm going to do in nearest few days.
Basically pg_protobuf solves same issues that zson solves but without any shared dictionaries that should be relearned from time to time.