0

Warum gibt das 2 Datensätze zurück, wenn nur ein mehrdimensionales Element im mehrdimensionalen Array vorhanden ist images?generate_subscripts (array, 2) gibt zwei Datensätze zurück, wenn nur ein mehrdimensionales Element vorhanden ist

SELECT images 
FROM (
    SELECT images, generate_subscripts(images, 2) AS s 
    FROM listings 
    WHERE listings.id = 2 
    ) as foo; 

Hinweis: Ich habe die Base64-Zeichenfolge für eine einfachere Anzeige verkürzt.

id    | 2 
created_at  | 2017-04-19 23:44:50.150913+00 
posted_by  | 10209280753550922 
images   | {{/9j/4AAJRgAB2dgKd/9k=,3/2/image-3-2-1492645490308.jpeg}} 

dev_dolphin_db=# SELECT images FROM(SELECT images, generate_subscripts(images, 2) AS s FROM listings where listings.id = 2) as foo; 
-[ RECORD 1 ]---------------------------------------------------------------------------------------------------------------------- 
images | {{/9j/4AAQSkZJRdgKd/9k=,3/2/image-3-2-1492645490308.jpeg}} 
-[ RECORD 2 ]---------------------------------------------------------------------------------------------------------------------- 
images | {{/9j/4AAQSkZN2dgKd/9k=,3/2/image-3-2-1492645490308.jpeg}} 
+0

ja, sorry! Ich weiß nicht, wie dieser hier ohne mein Antwortzeichen vorbeiging. – dman

Antwort

1

Es gibt zwei Elemente im Array, durch Komma getrennt:

{{/9j/4AAJRgAB2dgKd/9k=,3/2/image-3-2-1492645490308.jpeg}} 

See:

SELECT * 
FROM unnest('{{/9j/4AAJRgAB2dgKd/9k=,3/2/image-3-2-1492645490308.jpeg}}'::text[]) 

unnest 
-------------------------------- 
/9j/4AAJRgAB2dgKd/9k= 
3/2/image-3-2-1492645490308.jpeg 

generate_subscripts() gibt eine Zeile pro Element in der angegebenen Dimension zurück (nicht eine Zeile pro Dimension). The manual:

generate_subscripts ist eine Komfortfunktion, die für die angegebene Dimension der gegebenen Anordnung des Satzes von gültigen Subskripte erzeugt. Nullzeilen werden für Arrays zurückgegeben, die nicht die angeforderte Dimension oder für NULL-Arrays (aber gültige Indizes für NULL-Array-Elemente) zurückgegeben haben.

Wenn das angenommen hat, ein einziges Element sein, müßte es in doppelten Anführungszeichen, um die besondere Bedeutung des Kommas zu entkommen:

{{"/9j/4AAJRgAB2dgKd/9k=,3/2/image-3-2-1492645490308.jpeg"}} 

Abgesehen: in der modernen Postgres können Sie diese verwenden einfachere äquivalente Abfrage:

SELECT images 
FROM listings, generate_subscripts(images, 2) s 
WHERE id = 2; 

, die implizite CROSS JOIN LATERAL ist. Siehe:

Verwandte Themen