Запустите файл PostgreSQL .sql, используя аргументы командной строки - PullRequest
442 голосов
/ 16 марта 2012

У меня есть несколько файлов .sql с тысячами операторов INSERT, и мне нужно запустить эти вставки в моей базе данных PostgreSQL, чтобы добавить их в таблицу.Файлы настолько велики, что их невозможно открыть, скопировать операторы INSERT в окно редактора и запустить их там.В Интернете я обнаружил, что вы можете использовать следующее, перейдя в папку bin вашей установки PostgreSQL:

psql -d myDataBase -a -f myInsertFile

В моем случае:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

Затем меня попросятпароль для моего пользователя, но я не могу ничего ввести, и когда я нажимаю Enter, я получаю эту ошибку:

psql: FATAL: сбой аутентификации по паролю для пользователя "myUsername"

Почему я не могу ввести пароль?Есть ли способ обойти это, поскольку крайне важно, чтобы я мог запускать эти сценарии?

Я решил эту проблему, добавив новую запись в мой файл pg_hba.conf со следующей структурой:

# IPv6 local connections:
host    myDbName    myUserName ::1/128    trust

Файл pg_hba.conf обычно можно найти в папке «data» вашей установки PostgreSQL.

Ответы [ 11 ]

401 голосов
/ 23 августа 2012

Конечно, вы получите фатальную ошибку для аутентификации, потому что вы не включаете имя пользователя ...

Попробуйте это, это нормально для меня:)

psql -U username -d myDataBase -a -f myInsertFile

Если база данных удаленная, используйте ту же команду с хостом

psql -h host -U username -d myDataBase -a -f myInsertFile
255 голосов
/ 04 октября 2014

Вы должны сделать это так:

\i path_to_sql_file

См:

Enter image description here

126 голосов
/ 16 марта 2012

У вас есть четыре варианта ввода пароля:

  1. Установите переменную окружения PGPASSWORD. Подробнее см. В руководстве:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. Используйте файл .pgpass для хранения пароля. Подробности см. В руководстве:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. Использовать «аутентификацию доверия» для этого конкретного пользователя: http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. Начиная с PostgreSQL 9.1, вы также можете использовать строку подключения :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
39 голосов
/ 10 марта 2015
export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
31 голосов
/ 10 августа 2016

Используйте это для запуска * .sql файлов, когда сервер PostgreSQL находится в другом месте:

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

-h PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet

Затем вам будет предложено ввести пароль пользователя.

РЕДАКТИРОВАТЬ: обновлено на основе комментария предоставленного @ zwacky

26 голосов
/ 13 февраля 2018

Если вы вошли в psql на оболочке Linux, введите команду:

\i fileName.sql

для абсолютного пути и

\ir filename.sql

для относительного пути, откуда вы вызвалиPSQL.

24 голосов
/ 26 ноября 2012

Через терминал войдите в свою базу данных и попробуйте это:

database-# >@pathof_mysqlfile.sql

или

database-#>-i pathof_mysqlfile.sql

или

database-#>-c pathof_mysqlfile.sql
15 голосов
/ 13 января 2017

Вы можете указать как имя пользователя, так и PASSSWORD в самой командной строке.

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql
9 голосов
/ 29 июля 2017

вы могли бы сделать это следующим образом:

sudo -u postgres psql -d myDataBase -a -f myInsertFile

Если у вас есть доступ sudo на компьютере, и он не рекомендуется для производственных сценариев только для тестирования на вашем компьютере, это самый простой способ.

7 голосов
/ 16 октября 2012

Узнайте, как запустить SQL в командной строке для PostgreSQL в Linux:

Откройте терминал и убедитесь, что вы можете запустить команду psql:

psql --version
which psql

Моя версия 9.1.6 находится в /bin/psql.

Создайте простой текстовый файл с именем mysqlfile.sql

Отредактируйте этот файл, поместите туда одну строку:

select * from mytable;

Запустите эту команду из командной строки (подставив имя пользователя и имя вашей базы данных для pgadmin и kurz_prod):

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql

Ниже приведен результат, который я получаю на терминалепароль не запрашивается):

select * from mytable;

test1
--------
hi
me too

(2 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...