以下查询有效:
SELECT a, b
FROM unnest(ARRAY[(1,2), (3,4)])
AS t(a integer, b integer);
a b
_ _
1 2
3 2
但是,我无法使用其他列类型,例如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.
似乎在第二种情况下,列类型被推断为unknown
,但不会varchar(255)
自动转换为。
我如何使第二个示例工作并返回正确类型的列,如果可能的话,不发出警告且不修改ARRAY[...]
定义?
背景:我正在尝试使用psycopg2
Python模块提高大容量插入操作的性能,该模块不支持在VALUES
参数中使用多个行。在尝试其他方法时,我偶然发现了上面的示例。
我的意思是它不支持任意数量的行,例如
—
FX
cur.execute('INSERT INTO too VALUES %s', (list_of_rows,))
,不存在这样的东西。
嗯,我希望您将数组替换为单个参数。
—
戴夫·琼斯
VALUES
。以下工作对我而言正好:cur.execute('INSERT INTO foo VALUES (%s, %s), (%s, %s), (%s, %s)', (1, 'foo', 2, 'bar', 3, 'baz'))