Cloud SQL-PostgreSQL-如何导入.csv文件?

时间:2019-01-21 06:39:45

标签: postgresql google-cloud-platform google-cloud-sql postgresql-copy

我有一个运行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文档非常糟糕。它使我无处不在,非常混乱。

3 个答案:

答案 0 :(得分:0)

X不会做您想要做的事情,因为它从服务器(服务器无法访问客户端计算机上的文件)读取文件

您可以使用Y的{​​{1}}进行此操作,该操作在幕后使用COPY

答案 1 :(得分:0)

PostgreSQL是一项托管服务,因此您在用户方面有一些限制。您无法获得超级用户权限。到目前为止,您所能做的就是从控制台导入CSV文件。

要在CloudSQL(PostgreSQL)数据库中导入文件:

首先确保该表存在于数据库中。连接到您的CloudSQl(PostgreSQL)实例。运行命令SELECT * FROM pg_catalog.pg_tables;列出所有表。如果您在列表中找到了表,则在将数据导入数据库时​​,请使用与Table完全相同的名称。

  1. 将CSV文件上传到存储桶文件夹中

  2. 在SQL页面中找到CloudSQL(PostgreSQL)实例,然后单击实例的名称。

  3. Instance details页上,单击Import

  4. Cloud Storage file中,从存储桶中选择CSV文件。

  5. Format of import中,选择CSV

  6. table中输入要在其中导入数据的表的名称。

  7. 单击Import,将导入数据。

我已经尝试过上述方法,并且已成功将自定义CSV文件上传到CloudSQL(PostgreSQL)。

答案 2 :(得分:0)

昨天遇到了完全相同的问题。我需要执行以下命令:

COPY <my-table-name>
FROM STDIN
WITH (FORMAT csv);

,然后将我文件的内容复制并粘贴到控制台中。发挥了魅力。只需确保\.结尾即可关闭输入