Knex: Postgres-Array-Spalten

Erstellt am 18. Nov. 2014  ·  14Kommentare  ·  Quelle: knex/knex

Ich bin ein wenig neu in Sachen Knex, daher bin ich mir nicht sicher, ob diese Art von Problem hier willkommen ist, aber ich würde gerne eine PR einreichen, um die Erstellung von Postgres-Array-Spalten zu ermöglichen .

Ist es in Ordnung, den Knex-Dialektdateien db-spezifische Funktionen hinzuzufügen, oder sind diese Dateien nur eine Brücke, die den Zugriff auf Funktionen ermöglicht, die in allen DBs vorhanden sind, aber in jeder Datenbank anders implementiert sind?

feature request

Hilfreichster Kommentar

Danke Ben. Ich habe es erstellt mit:

table.specificType('photos', 'jsonb[]');

Immer noch besser, als knex.raw(alter table foo add column photos jsonb[]) Sachen zu machen.

Alle 14 Kommentare

Dialektspezifische Funktionen sind in Ordnung. Die Herausforderung besteht vor allem darin, sie zu dokumentieren. Wir würden eine PR für Array-Spalten machen.

Ich interessiere mich auch für Array/Composite-Unterstützung (außer Lesen statt Erstellen).

Obwohl eine sehr einfache Lösung, die ich gefunden habe, darin besteht, native Postgres-Funktionen zu verwenden, um zuerst in json zu konvertieren, und ich muss es nicht einmal JSON.parse , da es von Knex automatisch geparst zu werden scheint.

knex('users').select('username', knex.raw('array_to_json(addresses) as addresses_json'))...

Hoffentlich erweist sich dieser Trick für jeden als nützlich, der Arrays/Composites verwendet.

es, da es von Knex automatisch analysiert zu werden scheint

node-postgres macht das

Um auf die ursprüngliche Anfrage zurückzugreifen, möchten wir nicht als nächstes hamstringieren und sie auf den kleinsten gemeinsamen Nenner (SQLite) und die Kosten großartiger DBs wie Postgres beschränken. Um Knex zu behalten, was es ist, reicht es meiner Meinung nach aus, entweder einen Wert zu konvertieren (zB in MySQL ist eine Array-Spalte ein JSON-String) oder sogar eine Ausnahme auszulösen. Solange es User-Feedback gibt, sind wir gut.

Muss ich mit PostgreSQL 9.4 auf knex.raw zurückgreifen, um eine JSON-Array-Spalte json[] zu erstellen, oder gibt es eine bessere Möglichkeit, dies in Knex zu tun? Ich spreche über das Erstellen eines Schemas in der Migration. Bisher konnte ich nur die Methode table.json() , von der ich glaube, dass sie nur Json-Spalten mit einem einzigen Objekt erstellen kann.

Knex unterstützt derzeit überhaupt keine Array-Spalten. Sie werden also immer Raws machen.

Danke Ben. Ich habe es erstellt mit:

table.specificType('photos', 'jsonb[]');

Immer noch besser, als knex.raw(alter table foo add column photos jsonb[]) Sachen zu machen.

Ja, total vergessen über specificType

Vielen Dank für die Problemumgehung mit 'specificType'. Sehr hilfreich!

Schließen, da .json und .jsonb im Schema-Builder vorhanden sind. In Grenzfällen ist specificType ein Fallback.

table.specificType('tags', 'character varying(20)[]')

@wubzz Ich denke, das sollte wieder geöffnet werden. Die ursprüngliche Frage bezog sich nicht auf JSONB, sondern auf native Postgres-Array-Typen.

Es ist besser, eine neue Funktionsanfrage zu erstellen, die der Problemvorlage folgt und eine API vorschlägt.

Obwohl ich keinen Vorteil darin sehe, eine separate Builder-Methode im Vergleich zu .specificType wenn dies nur eine Postgresql-Funktion ist.

Ja, ich denke, die beste PR wäre, einfach zu dokumentieren, wie man es mit specificType . Dies ist eine großartige Funktion, da sie dem Leser auch die Möglichkeit gibt, andere PG-spezifische Typen zu kennen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

koskimas picture koskimas  ·  3Kommentare

arconus picture arconus  ·  3Kommentare

hyperh picture hyperh  ·  3Kommentare

zettam picture zettam  ·  3Kommentare

rarkins picture rarkins  ·  3Kommentare