以下查询有效:
SELECT a, b
FROM unnest(ARRAY[(1,2), (3,4)])
AS t(a integer, b integer);
a b
_ _
1 2
3 2
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用不同的列类型,例如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.
Run Code Online (Sandbox Code Playgroud)
似乎在第二种情况下,列类型被推断为unknown,而不会varchar(255)自动转换为。
如果可能,我如何使第二个示例工作并返回正确类型的列,如果可能没有警告并且不修改ARRAY[...]定义?
背景:我正在尝试使用psycopg2Python 模块提高大型批量插入操作的性能,该模块不支持在VALUES参数中使用多行。我在尝试其他一些方法时偶然发现了上面的例子。