我想复制一个CSV文件到Postgres表中。这个表中大约有100列,所以如果没有必要,我不想重写它们。
我正在使用\copy table from 'table.csv' delimiter ',' csv;
命令,但没有创建表,我得到ERROR: relation "table" does not exist
。如果我添加一个空白表,我不会得到错误,但什么也没有发生。我尝试了两三次这个命令,没有输出或消息,但当我通过PGAdmin检查它时,表没有更新。
有没有一种方法可以导入一个包含标题的表,就像我正在尝试做的那样?
7条答案
按热度按时间30byixjq1#
这个方法奏效了,第一行有列名。
字符串
e5njpo682#
使用Python库
pandas
,您可以轻松地创建列名并从csv文件中推断数据类型。字符串
if_exists
参数可以设置为替换或附加到现有的表,例如df.to_sql('pandas_db', engine, if_exists='replace')
。这也适用于其他输入文件类型,docs here和here。s8vozzvw3#
无权限终端替代
NOTES上的pg文档说
路径将相对于服务器进程的工作目录(通常是集群的数据目录)进行解释,而不是客户端的工作目录。
所以,总的来说,使用
psql
或任何客户端,即使是在本地服务器上,你也会遇到问题.而且,如果你为其他用户表达COPY命令,例如.在Github README,读者会遇到问题.表示客户端权限的相对路径的唯一方法是使用 STDIN,
当指定STDIN或STDOUT时,数据通过客户端和服务器之间的连接传输。
如remembered here:
字符串
r9f1avp54#
我已经使用这个函数一段时间了,没有任何问题。你只需要提供csv文件中的数字列,它将从第一行获取标题名称并为你创建表:
字符串
sczxawaw5#
字符串
csv中的所有列都应与表中的列相同(或与指定的列相同)
约为
COPY
https://www.postgresql.org/docs/9.2/sql-copy.html
myss37ts6#
要使用查询从CSV文件复制到CSV文件中带有标题的PostgreSQL表:
字符串
eaf3rand7#
您可以使用d6tstack为您创建表,并且是faster than pd.to_sql(),因为它使用本地DB导入命令。它支持Postgres以及MYSQL和MS SQL。
字符串
它也适用于导入多个CSV,解决数据模式更改和/或在写入数据库之前使用pandas进行预处理(例如日期),请参阅examples notebook中的进一步内容
型