如何在使用psycopg3
和COPY TO STDOUT
功能获取数据时获取列名,例如:copy (select a, b, c, from t1 join t2 using (t1_id) where not t1.is_test) to STDOUT
功能?因为这不是简单的从表中选择,所以我不能从元数据中获得表列的名称。
如果我尝试执行COPY (query) TO STDOUT WITH CSV HEADER
(如这里所述https://stackoverflow.com/a/70598136/1828296),我会得到错误psycopg.DataError: bad copy format: got a newline before the end of the row
。
另一种方法是执行常规的select query limit 0
并从结果中获取列名,但如果查询很长/很大,这将使获取结果所需的时间/资源加倍,因为我必须执行两次。
请注意:
这将在psql中很好地工作,似乎这不是SQL语法问题,而是psycopg3
库问题。
在他们的文档(psycopg.org/psycopg3/docs/basic/...)中,他们说:* 不得指定COPY选项,如FORMAT CSV、DELIMITER、NULL:请不要理会这些细节,谢谢 *。我想知道是否有一些解决方法。
2条答案
按热度按时间f45qwnt81#
在查询中分配的列别名将自动用作列名。错误可能是由语法不正确引起的。请看下面的例子:
mwg9r5ms2#
从这里复制 * 逐块复制 *