Kueri berikut berfungsi:
SELECT a, b
FROM unnest(ARRAY[(1,2), (3,4)])
AS t(a integer, b integer);
a b
_ _
1 2
3 2
Namun, saya tidak dapat menggunakan jenis kolom yang berbeda seperti varchar(255)
:
SELECT a, b
FROM unnest(ARRAY[(1,'hello'), (3,'world')])
AS t(a integer, b varchar(255));
ERROR: 42804: function return row and query-specified return row do not match
DETAIL: Returned type unkown at ordinal position 2, but query expects text.
Tampaknya, dalam kasus kedua, jenis kolom disimpulkan sebagai unknown
, yang tidak dilemparkan ke varchar(255)
otomatis.
Bagaimana saya membuat contoh kedua berfungsi dan mengembalikan kolom dengan tipe yang tepat, jika mungkin tanpa peringatan dan tanpa mengubah ARRAY[...]
definisi?
Latar Belakang: Saya mencoba untuk meningkatkan kinerja operasi penyisipan massal besar menggunakan psycopg2
modul Python, yang tidak mendukung penggunaan beberapa baris dalam VALUES
argumen. Saya menemukan contoh di atas ketika mencoba beberapa metode lain.
cur.execute('INSERT INTO too VALUES %s', (list_of_rows,))
tidak ada.
VALUES
. Berikut ini berfungsi dengan baik untuk saya:cur.execute('INSERT INTO foo VALUES (%s, %s), (%s, %s), (%s, %s)', (1, 'foo', 2, 'bar', 3, 'baz'))