Ich habe eine postgresql Tabelle von Städten (1 Zeile = 1 Stadt) mit einem Jsonb Colum mit dem Namen der Stadt in verschiedenen Sprachen (als Liste, kein Array). Zum Beispiel für Paris (Frankreich) Ich habe:Suche nach einem Wert in einer Jsonb-Liste von Schlüsseln/Werten
id_city (integer) = 7444
name_city (text) = Paris
names_i18n (jsonb) = {"name:fr":"Paris","name:zh":"巴黎","name:it":"Parigi",...}
In Wirklichkeit in meiner Tabelle habe ich rund 20 verschiedene Sprachen. Also versuche ich, eine Stadt zu finden, die nach einem beliebigen Namen sucht: den Wert von xx, der mit einem vom Benutzer angegebenen Parameter übereinstimmt, aber ich kann nicht herausfinden, wie man die jsonb-Spalte auf diese Weise abfragt. Ich habe unter so etwas wie die Anforderung versucht, aber es scheint nicht zu dem guten syntaxe
select * from jsonb_each_text(select names_i18n from CityTable)
where value ilike 'Parigi'
ich auch die folgenden
select * from CityTable where names_i18n ? 'Parigi';
versucht habe, aber es scheint nur für die Schlüsselrolle zu arbeiten Gibt es für den Wertteil des JSONB einen ähnlichen Operator? Ich brauche auch einen Weg zu wissen, welcher Name: XX wurde gefunden, nicht nur der Name der Stadt. Jeder hat eine Ahnung?
Hallo, es funktioniert gut, danke! Aber die Abfrage ist sehr lang zu laufen .... Ich habe einen GIN-Index auf der Jsonb-Spalte names_i18n, gibt es noch etwas, das ich tun kann, um die Abfrage schneller zu machen? –
@ThomasPerrin Wenn Sie noch die DB erstellen, dann normalisieren Sie sie. Im Grunde erstellen Sie eine 'names_i18n' Tabelle mit 3 Spalten: id_city, language_code und name. –