Запустите файл PostgreSQL .sql, используя аргументы командной строки

362

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

psql -d myDataBase -a -f myInsertFile

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

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

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

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

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

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

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

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

  • 5
    Вы уже получили свой ответ, но на всякий случай ... «Я ничего не могу ввести», не могли бы вы сказать, что при вводе пароля ничего не отображается? Это нормально в этом случае, обычно ввод пароля и нажатие Enter должны работать ...
  • 0
    У меня была похожая проблема при установке копии ITIS ( itis.gov ). База данных не существует, поэтому я не могу использовать ее имя. Из-за того, как работает PostgreSQL, я мог сделать это: psql --port = 5554 --username = root --file = ITIS.sql template1
Теги:
command-line
psql

11 ответов

100
Лучший ответ

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

  • 0
    Привет. Теперь я установил настройки на доверие, но я заметил, что программа пытается использовать мое имя пользователя Windows для входа в систему. Я хочу использовать роль, которую я настроил в моей базе данных Postgresql. Есть ли способ сообщить ему, какую роль использовать для запуска команды?
  • 1
    @CSharpened: используйте параметр -u как описано в руководстве
Показать ещё 1 комментарий
376

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

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

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

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

psql -h host -U username -d myDataBase -a -f myInsertFile
  • 4
    Обратите внимание, что указанное имя пользователя должно быть допустимой ролью postgres. По умолчанию используется текущий зарегистрированный пользователь.
  • 3
    Почему -a пары?
Показать ещё 1 комментарий
225

Вы должны сделать это следующим образом:

\i path_to_sql_file

См:

Изображение 5095

  • 1
    Я получаю Permission denied
  • 4
    после выполнения chmod 777 myfile ошибка chmod 777 myfile Permission denied
Показать ещё 1 комментарий
34
export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
  • 1
    как я могу сделать это без вывода
  • 1
    psql -h <хост> -d <база данных> -U <имя_пользователя> -p <порт> -a -q -w -f <файл> .sql
Показать ещё 1 комментарий
22

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

database-# >@pathof_mysqlfile.sql

или

database-#>-i pathof_mysqlfile.sql

или

database-#>-c pathof_mysqlfile.sql
  • 0
    это решение более твердо, как по мне; не отмеченный как ответ
17

Используйте это для выполнения файлов *.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 
-f file

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

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

  • 2
    не возражаете объяснить, что такое -a и -q ?
  • 3
    @ ChickenWing24 -a : все эхо, -q : тихо, -f : файл
12

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

\i fileName.sql

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

\ir filename.sql

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

12

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

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql
  • 0
    Это работает, если вы не хотите устанавливать переменные окружения или использовать странные файлы пропусков. знак равно
9

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

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

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

7

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

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

psql --version
which psql

Mine - это версия 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)
  • 0
    Как вы настраиваете пользователя? Я впервые устанавливаю и запускаю -f для нового файла .sql. Всегда говорит неправильный пароль
4

Вы можете открыть командную строку и запустить ее как администратор. Затем введите

../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"

Password for user postgres: появится.

Введите свой пароль и введите его. Я не мог видеть пароль, что я набирал, но на этот раз, когда я нажимаю кнопку ввода, он работал. Фактически я загружал данные в базу данных.

  • 0
    Я думаю, что вы имеете в виду -d "postgres"
  • 0
    @amphetamachine -d для имени базы данных, проверьте psql --help

Ещё вопросы

Сообщество Overcoder
Наверх
Меню