Cloud SQL - PostgreSQL - как импортировать файл .csv?

У меня есть экземпляр Cloud SQL с PostgreSQL и файл .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 является облачным суперпользователем, но не «суперпользователем». Как мне импортировать этот файл .csv?

Я не знаю, как войти в систему / получить доступ как пользователь cloudsqladmin или предоставить роль, позволяющую импортировать файл. Я отчаянно нуждаюсь в быстрой помощи.

Документация Google в этой единственной области Cloud Sql с Postgres ужасна. Это сбивает меня с толку и очень сбивает с толку.


person user10664542    schedule 21.01.2019    source источник


Ответы (3)


PostgreSQL - это управляемая служба, поэтому у вас есть некоторые ограничения в отношении пользователей. Вы не можете предоставить SUPERUSER разрешение. Что вы можете сделать, так это импортировать файл CSV из консоли.

Чтобы импортировать файл в базу данных CloudSQL (PostgreSQL):

Сначала убедитесь, что таблица существует в базе данных. Подключитесь к своему экземпляру CloudSQl (PostgreSQL). Выполните команду SELECT * FROM pg_catalog.pg_tables;, чтобы вывести список всех таблиц. Если вы нашли свою таблицу в списке, используйте то же имя для Table при импорте данных в базу данных.

  1. Загрузите файл CSV в папку корзины

  2. Найдите экземпляр CloudSQL (PostgreSQL) на странице SQL и щелкните имя экземпляра.

  3. На странице Instance details щелкните Import.

  4. В Cloud Storage file выберите файл CSV из корзины.

  5. В Format of import выберите CSV

  6. В table напишите имя таблицы, в которую вы хотите импортировать данные.

  7. Щелкните Import, и данные будут импортированы.

Я сам пробовал описанные выше методы и успешно загрузил собственный CSV-файл в CloudSQL (PostgreSQL).

person Andrei Cusnir    schedule 24.01.2019
comment
У меня есть требование к скрипту, загружающему .csv в CloudSQL / PostgreSQL, и поэтому требование «щелкнуть» сокращается с использованием Postgres на GCP, поэтому переход к другому облачному провайдеру кажется лучшим, что можно здесь сделать. Google взял отличную базу данных, одну из лучших баз данных с открытым исходным кодом, и упростил ее, вероятно, чтобы быть на одном уровне с их предложениями облачных баз данных. - person user10664542; 03.07.2019

COPY в любом случае не будет делать то, что вы хотите, потому что он читает файл с сервера (сервер, не имеющий доступа к файлам на клиентском компьютере).

Для этого вы можете использовать \copy psql, который использует COPY ... FROM STDIN за кулисами.

person Laurenz Albe    schedule 21.01.2019
comment
Я пробовал postgres == ›\ copy, и это тоже не помогло. stackoverflow.com/ вопросы / 54297933 / - person user10664542; 22.01.2019
comment
Со стороны службы поддержки Google невозможно загрузить файл .csv в Postgres, работающий под Cloud SQL. Они сделали это так, что вы не можете, но можете с MySQL, но наши технические требования не достижимы с использованием MySQL. - person user10664542; 29.06.2019
comment
Если ваш хостинг-провайдер чрезмерно ограничивает вас, выберите лучшего. - person Laurenz Albe; 30.06.2019
comment
согласен, есть способ сделать это (см. ответ ниже), но это очень долгий процесс. Я не могу это написать. Мне приходится дурачиться с облачным хранилищем и щелкать миллиард раз, чтобы это заработало. - person user10664542; 03.07.2019

получил точно такую ​​же проблему вчера. Мне нужно было выполнить следующую команду:

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

а затем скопируйте и вставьте содержимое моего файла в консоль. Сработал оберег. Просто не забудьте закончить свой файл до \., чтобы закрыть ввод

person Teocali    schedule 09.10.2020