0

Pourquoi retourne-t-il 2 enregistrements lorsqu'il n'y a qu'un seul élément multidimensionnel dans le tableau multidimensionnel images?generate_subscripts (array, 2) retourne deux enregistrements lorsqu'il n'y a qu'un seul élément multidimensionnel

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

Remarque: J'ai raccourci la chaîne base64 pour faciliter la visualisation.

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

oui, désolé! Je ne sais pas comment celui-ci a glissé sans ma marque de réponse. – dman

Répondre

1

Il y a deux éléments dans votre tableau, séparés par la virgule:

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

Voir:

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() renvoie une ligne par élément dans la dimension spécifiée (pas une ligne par dimension). The manual:

generate_subscripts est une fonction de confort qui génère l'ensemble d'indices valides pour la dimension spécifiée de la matrice donnée. Les lignes zéro sont renvoyées pour les tableaux qui n'ont pas la dimension demandée ou pour les tableaux NULL (mais des indices valides sont renvoyés pour les éléments de tableau NULL ).

Si c'est censé être un seul élément, il devrait être entre guillemets doubles pour échapper à la signification particulière de la virgule:

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

En plus: dans Postgres moderne, vous pouvez utiliser simple requête équivalente:

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

C'est une CROSS JOIN LATERAL implicite. Voir: