我有一个运行PostgreSQL的Cloud SQL实例,并且在本地计算机上有一个.csv文件。
我创建了一个用户和一个数据库。我以该用户身份登录该数据库,并创建了一个与我的.csv文件匹配的表。
我有一个.csv文件和一个具有以下内容的import.sql文件:
COPY <my-table-name>
FROM 'C:\<path-to>\data.csv'
WITH (FORMAT csv);
当我运行psql命令时:
psql -f import.sql <connection string>
我回来了:
psql:./import.sql:3: ERROR: must be superuser to COPY to or from a file
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
我尝试通过以postgres
用户的身份将其设置为“超级用户”,但我得到了:
psql:./add-superuser.sql:1: ERROR: must be superuser to alter superusers
显示所有用户,显示:
postgres-> \du
cloudsqladmin | Superuser, Create role, Create DB, Replication, Bypass RLS
cloudsqlagent | Create role, Create DB | {cloudsqlsuperuser}
cloudsqlreplica | Replication | {}
cloudsqlsuperuser | Create role, Create DB | {}
<my-user> | Create role, Create DB | {cloudsqlsuperuser}
postgres | Create role, Create DB | {cloudsqlsuperuser}
postgres
是cloudsqlsuperuser,但不是'superuser'。如何导入此.csv文件?
我不知道如何以用户cloudsqladmin
的身份登录/获得访问权限,或者授予角色以允许导入文件。我急切需要帮助。
在Cloud Sql的这一领域中,与Postgres一起使用的Google文档非常糟糕。它使我无处不在,非常混乱。
答案 0 :(得分:0)
X
不会做您想要做的事情,因为它从服务器(服务器无法访问客户端计算机上的文件)读取文件。
您可以使用Y
的{{1}}进行此操作,该操作在幕后使用COPY
。
答案 1 :(得分:0)
PostgreSQL是一项托管服务,因此您在用户方面有一些限制。您无法获得超级用户权限。到目前为止,您所能做的就是从控制台导入CSV文件。
要在CloudSQL(PostgreSQL)数据库中导入文件:
首先确保该表存在于数据库中。连接到您的CloudSQl(PostgreSQL)实例。运行命令SELECT * FROM pg_catalog.pg_tables;
列出所有表。如果您在列表中找到了表,则在将数据导入数据库时,请使用与Table
完全相同的名称。
将CSV文件上传到存储桶文件夹中
在SQL页面中找到CloudSQL(PostgreSQL)实例,然后单击实例的名称。
在Instance details
页上,单击Import
。
在Cloud Storage file
中,从存储桶中选择CSV文件。
在Format of import
中,选择CSV
在table
中输入要在其中导入数据的表的名称。
单击Import
,将导入数据。
我已经尝试过上述方法,并且已成功将自定义CSV文件上传到CloudSQL(PostgreSQL)。
答案 2 :(得分:0)
昨天遇到了完全相同的问题。我需要执行以下命令:
COPY <my-table-name>
FROM STDIN
WITH (FORMAT csv);
,然后将我文件的内容复制并粘贴到控制台中。发挥了魅力。只需确保\.
结尾即可关闭输入