On Wed, 24 Aug 2016 13:52:41 +0200 José Hurtado <jhurta...@gmail.com> wrote:
> Hola, > > Creo que vendría bien tener algo parecido a: > > DECLARE > dic1 HASHSET(varchar, schema_name.table_name); > -- format: HASHSET(anytype, anytype) > ... > BEGIN > ... > ... > IF (hashset_has_key(dic1, "alfa") THEN > dic1["alfa"] := (val1, val2)::schema_name.table_name; > -- O: hashset_update(dic1, "alfa", (val1, > val2)::schema_name.table_name); > ELSE > hashset_add(dic1, "alfa", (val1, val2)::schema_name.table_name); > END IF; > ... > hashset_remove(dic1, "alfa"); > > ... > END; > > Ahora estoy implementando algo parecido con tablas temporales, pero > creo que con una estructura así se podrían resolver mejor ciertos > algoritmos. ... Estrictamente hablando, una tabla de una base de datos es un set o conjunto. Un hashset usa un indice de tipo hash para acceder(leer, borrar, actualizar, crear) a la informacion del set y un diccionario es otro tipo de set. En tu codigo en pg/pl, hashset_add seria el equivalente a un INSERT, hashset_remove a un DELETE, todas la operaciones sobre un set se pueden hacer en sql. La unica diferencia entre tu algoritmo y una tabla normal de postgresql estriba en que quieres usar un hash para acceder a la informacion, pero por debajo postgres usara un btree, con lo que el coste final del algoritmo sera la del btree mas el coste de ejecutar tu codigo. O bien no he entendido que quieres hacer o no creo que vaya a suponer una mejora. Opciones que se me ocurren: a) Puedes usar un indice tipo hash en vez de btree en postgres sin embargo tiene sus inconvenientes. b) Puedes usar arrays en las columnas(https://www.postgresql.org/docs/current/static/arrays.html). c) Usa una implementacion de hashtable o diccionario (hypertable p.ej) y accede a ella por FDW. d) Usa plpython, ya tiene tipos de hashtable y diccionario. e) O como ya te han sugerido, usa Jsonb. Seguro que hay mas opciones, no obstante, mide el rendimiento de cada una. > Un saludo. --- --- Eduardo Morras <emorr...@yahoo.es> - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda