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


540

У меня есть несколько файлов .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.


6
Вы уже получили свой ответ, но на всякий случай ... «Я ничего не могу ввести», возможно, вы говорите о том, что при вводе пароля ничего не отображается? Это нормально в этом случае, обычно ввод пароля и
нажатие клавиши

У меня была похожая проблема при установке копии ITIS ( itis.gov ). База данных не существует, поэтому я не могу использовать ее имя. Из-за того, как работает PostgreSQL, я мог сделать это: psql --port = 5554 --username = root --file = ITIS.sql template1
Cyberknight

Ответы:


157

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

  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.

Привет. Сейчас я установил настройки на доверие, но я заметил, что программа пытается использовать мое имя пользователя Windows для входа в систему. Я хочу использовать роль, которую я настроил в моей базе данных Postgresql. Есть ли способ сообщить ему, какую роль использовать для запуска команды?
CSharpened

2
@CSharpened: используйте -uпараметр, описанный в руководстве
a_horse_with_no_name

№ 2 очень прост. Просто добавьте одну строку, содержащую host: port: db: user: pass в файл, и все готово. Хорошо сделано.
Криль

494

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

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

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

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

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

4
Обратите внимание, что указанное имя пользователя должно быть допустимой ролью postgres. По умолчанию используется текущий зарегистрированный пользователь.
Матиас Крулл

8
Почему -aпарам?
Алик Эльзин-килака

5
@ AlikElzin-kilaka -aздесь не нужен. Это «Вывести все непустые строки ввода в стандартный вывод, когда они читаются»
mjspier

Это должен быть принятый ответ.
Костанос

316

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

\i path_to_sql_file

Видеть:

Введите описание изображения здесь


2
Я получаюPermission denied
Зак

4
после выполнения chmod 777 myfileошибка Permission deniedбыла установлена
Ulug'bek Ro'zimboyev

5
@Zac, если ваш отказ в доступе произошел на компьютере с Windows, возможно, вы используете неправильные косые черты.
pgsandstrom

2
У меня была эта ошибка в Windows, и она оказалась косой чертой, как упомянул @pgsandstrom. Неверные косые черты = используйте вместо них прямые косые черты, а не путь в кавычках. \ ic: /dev/script.sql
Дейв,

51

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


5
@ ChickenWing24 -a: все эхо, -qтихо -f
,:

Это решило мою собственную проблему, отлично
Теми 'Topsy' Белло

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

1
как я могу сделать это без выхода
Lu32

2
psql -h <хост> -d <база данных> -U <имя_пользователя> -p <порт> -a -q -w -f <файл> .sql
vishu9219

3
@ Lu32 Вы также можете не указывать флаг -a (что означает «Вывести все непустые строки ввода на стандартный вывод при их чтении»). EDIT проверен, без -a он печатает меньше, но все равно слишком много информации. Так что флаг -q правильный, как сказал vishu9219.
Рауни Лиллемец

41

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

\i fileName.sql

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

\ir filename.sql

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


Как говорит @Florian, после входа в систему вы можете выполнить файл. Не забудьте пометить любые строки комментариев в SQL одним из двух способов ... - комментарий к концу строки a) - комментарий в одну строку ИЛИ b) / * комментарии в несколько строк * /
Sumit S

26

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

database-# >@pathof_mysqlfile.sql

или

database-#>-i pathof_mysqlfile.sql

или

database-#>-c pathof_mysqlfile.sql

это решение более твердо, как по мне; не тот, который отмечен как ответ
AlexG

17

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

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

Это работает, если вы не хотите устанавливать переменные окружения или использовать странные файлы пропусков. =)
мартин

это должен был быть принятый ответ, спасибо
grepit

13

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

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

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


9

Узнайте, как запустить 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)

Как вы настраиваете пользователя? Я впервые устанавливаю и запускаю -f для нового файла .sql. Всегда говорит неправильный пароль
mKane

4

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

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

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

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


Я думаю, что вы имеете в виду-d "postgres"
амфетахин

@amphetamachine -d для имени базы данных, проверьтеpsql --help
Yaz

1

Я достиг того, что написал (находится в каталоге, где находится мой скрипт)

::someguy@host::$sudo -u user psql -d my_database -a -f file.sql 

где -u user роль, которой принадлежит база данных, где я хочу выполнить сценарий, затем psqlподключается к psqlконсоли, после чего -d my_database, mydatabaseнаконец , загружает меня, -a -f file.sqlгде -aвыводит весь ввод из сценария и -fвыполняет команды file.sqlв mydatabase, а затем завершает работу.

Я использую: PSQL (PostgreSQL) 10.12 на (Ubuntu 10.12-0ubuntu0.18.04.1)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.