web-dev-qa-db-fra.com

Convertissez de manière dynamique des touches HSTORE en colonnes pour un ensemble inconnu de clés

J'ai une base de données qui stocke un groupe de champs personnalisés à l'aide de hstore. Afin de la fusionner dans une autre base de données qui ne prend pas en charge hstore, je souhaite diviser les clés en colonnes supplémentaires.

Les utilisateurs peuvent ajouter de nouveaux champs personnalisés et donc je ne peux donc pas compter sur la connaissance des clés à l'avance. Ce qui rend la réponse à "attributs d'une colonne htstore en tant que colonnes séparées dans une vue?" Non applicable pour mon problème.

Lorsqu'un enregistrement n'a pas de clé présent dans d'autres enregistrements, il devrait obtenir la même colonne avec une valeur null.

Comment puis-je faire cela?

8
Fred Stark

Vous voudrez utiliser le -> Opérateur sur la colonne (voir ICI ).

Les enregistrements sans la même clé dans d'autres enregistrements montreront comme null.

create table hstore_test (id serial, hstore_col hstore);
insert into hstore_test (hstore_col) values ('key1=>val11, key2=>val12, key3=>val13'), ('key1=>val21, key2=>val22');
select hstore_col->'key1' as key1, hstore_col->'key2' as key2, hstore_col->'key3' as key3 from hstore_test;
┌───────┬───────┬───────┐
│ key1  │ key2  │ key3  │
├───────┼───────┼───────┤
│ val11 │ val12 │ val13 │
│ val21 │ val22 │ NULL  │
└───────┴───────┴───────┘
(2 rows)

ICI est une réponse similaire.

2
Ian Timothy