Postgresql 使用Python将大型csv文件上载到AWS中的Postgres RDS

Postgresql 使用Python将大型csv文件上载到AWS中的Postgres RDS,postgresql,amazon-rds,Postgresql,Amazon Rds,使用Python将大型csv文件加载到AWS中的Postgres RDS数据库中的最简单方法是什么 为了将数据传输到本地postgres实例,我以前使用了psycopg2连接来运行SQL语句,如: COPY my_table FROM 'my_10gb_file.csv' DELIMITER ',' CSV HEADER; 但是,对远程AWS RDS数据库执行此操作时,会产生错误,因为.csv文件位于我的本地计算机上,而不是数据库服务器上: ERROR: must be superuser t

使用Python将大型csv文件加载到AWS中的Postgres RDS数据库中的最简单方法是什么

为了将数据传输到本地postgres实例,我以前使用了
psycopg2
连接来运行SQL语句,如:

COPY my_table FROM 'my_10gb_file.csv' DELIMITER ',' CSV HEADER;
但是,对远程AWS RDS数据库执行此操作时,会产生错误,因为
.csv
文件位于我的本地计算机上,而不是数据库服务器上:

ERROR: must be superuser to COPY to or from a file
SQL state: 42501
Hint: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
解释了为什么这不起作用


我现在正在寻找Python语法,以便使用
psql
自动执行此操作。我有大量的
.csv
文件需要上传,因此我需要一个脚本来自动执行此操作。

首先,您需要像往常一样使用
create table
SQL语句在RDS Postgres中创建表定义

然后您需要像这样运行
psql
语句:

psql -p 5432 --host YOUR_HOST --username YOUR_USERNAME --dbname YOUR_DBNAME --command "\copy my_table FROM 'my_10gb_file.csv' DELIMITER ',' CSV HEADER"
在Python中,我们可以按如下方式设置和执行它:

host = "YOUR_HOST"
username = "YOUR_USERNAME"
dbname = "YOUR_DBNAME"

table_name = "my_table"
file_name = "my_10gb_file.csv"
command = "\copy {} FROM '{}' DELIMITER ',' CSV HEADER".format(table_name, file_name)

psql_template = 'psql -p 5432 --host {} --username {} --dbname {} --command "{}"'

bash_command = psql_template.format(host, username, dbname, command.strip())

process = subprocess.Popen(bash_command, stdout=subprocess.PIPE, shell=True) 

output, error = process.communicate()
psql-c”\n从“my_10gb\u file.csv”分隔符、“csv头”复制my_表“
会起作用。。。