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

Responder a