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

У меня есть некоторые .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.

Ответ 1

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

Ответ 2

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

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

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

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

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

Ответ 3

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

\i path_to_sql_file

См:

Enter image description here

Ответ 4

export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql

Ответ 5

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

Ответ 6

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

\i fileName.sql

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

\ir filename.sql

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

Ответ 7

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

database-# >@pathof_mysqlfile.sql

или

database-#>-i pathof_mysqlfile.sql

или

database-#>-c pathof_mysqlfile.sql

Ответ 8

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

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql

Ответ 9

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

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

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

Ответ 10

Просматривайте, как запустить 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)

Ответ 11

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

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

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

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