UNNEST
avec des tableaux peut être utilisée avec la syntaxe VALUES multi-lignes. Je pense que cette méthode est plus lente que l'utilisation de la fonction COPY
mais il m'est utile dans mon travail avec psycopg et python (python list
transmis à cursor.execute
devient pg ARRAY
) :
INSERT INTO tablename (fieldname1, fieldname2, fieldname3)
VALUES (
UNNEST(ARRAY[1, 2, 3]),
UNNEST(ARRAY[100, 200, 300]),
UNNEST(ARRAY['a', 'b', 'c'])
);
sans VALUES
en utilisant une sous-sélection avec un contrôle d'existence supplémentaire :
INSERT INTO tablename (fieldname1, fieldname2, fieldname3)
SELECT * FROM (
SELECT UNNEST(ARRAY[1, 2, 3]),
UNNEST(ARRAY[100, 200, 300]),
UNNEST(ARRAY['a', 'b', 'c'])
) AS temptable
WHERE NOT EXISTS (
SELECT 1 FROM tablename tt
WHERE tt.fieldname1=temptable.fieldname1
);
la même syntaxe pour les mises à jour en masse :
UPDATE tablename
SET fieldname1=temptable.data
FROM (
SELECT UNNEST(ARRAY[1,2]) AS id,
UNNEST(ARRAY['a', 'b']) AS data
) AS temptable
WHERE tablename.id=temptable.id;