У меня есть несколько файлов .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: хост myDbName myUserName :: 1/128 trust
Файл pg_hba.conf обычно можно найти в папке ‘ data ‘вашей установки PostgreSQL.
У вас есть четыре варианта для ввода пароля:
- Установите переменную среды PGPASSWORD . Подробнее см. Руководство:
http://www.postgresql.org/docs/current/static/libpq-envars.html - Используйте файл .pgpass для хранения пароля. . Подробности см. В руководстве:
http://www.postgresql.org/docs/current/static/libpq-pgpass.html - Используйте «доверительную аутентификацию» для этого конкретного пользователя. : http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
- Начиная с PostgreSQL 9.1, вы также можете использовать строку подключения:
https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
Конечно, вы получите фатальную ошибку при аутентификации, потому что вы не включаете имя пользователя …
Попробуйте это, мне это подходит 🙂
psql -U username -d myDataBase -a -f myInsertFile
Если база данных удаленная, используйте ту же команду с хостом
psql -h host -U username -d myDataBase -a -f myInsertFile

-
4Обратите внимание, что предоставленное имя пользователя должно быть действующей ролью postgres. По умолчанию — текущий авторизованный пользователь. — маттиас Крулл 5 октября 2012 г., 17:29
-
9Почему
- a
param? — AlikElzin-kilaka 6 фев., в 9:19 -
6@ AlikElzin-kilaka
-a
здесь не нужен. Это «Печатать все непустые строки ввода в стандартный вывод по мере их чтения» — mjspier 26 фев. ’18 в 21:16
Конечно, вы получите фатальную ошибку при аутентификации. ng, потому что вы не включаете имя пользователя …
Попробуйте это, для меня это нормально 🙂
psql -U имя пользователя -d myDataBase -a -f myInsertFile
Если база данных удаленная, используйте ту же команду с хостом
psql - h host -U имя пользователя -d myDataBase -a -f myInsertFile
Делать это нужно так:
i path_to_sql_file
См.:


-
2Я получаю
В доступе отказано
— Зак Мар 23 ’17 в 15:11 -
4после выполнения
chmod 777 myfile
ошибкаPermission denied
была исправлена - Улуг’бек Розимбоев, 10 апр., 2017 в 12:39 -
6@Zac, если ваше разрешение отклонено, произошло Windows-машина, возможно, вы используете неправильные косые черты. — pgsandstrom 13 июня ’18, 9:00
-
2У меня была эта ошибка в Windows, и это оказались косые черты, как упоминал @pgsandstrom. Неверные косые черты = используйте вместо них косые черты и без кавычек в пути. i c:/dev/script.sql — Дэйв 28 окт. ’19 в 1:01
Делать это нужно так:
i path_to_sql_file
См.:
Используйте это для выполнения файлов * .sql, когда сервер PostgreSQL расположен в место разницы:
psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f/home/jobs/Desktop/resources/postgresql.sql-h IP-адрес сервера PostgreSQL-d имя базы данных-U имя пользователя-p порт, который сервер PostgreSQL прослушивает-f путь к сценарию SQL-все echo-q quiet
Тогда вы предлагается ввести пароль пользователя.
EDIT: обновлено на основе комментария, предоставленного @zwacky
-
5@ ChickenWing24
-a
: все эхо,-q
: quiet,-f
: file — Саймон Вики, 2 ноября 2016 г., 23:25
Используйте это для выполнения файлов * .sql, когда сервер PostgreSQL находится в другом месте:
psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f/home/jobs/Desktop/resources/postgresql.sql-h IP-адрес сервера PostgreSQL-d имя базы данных-U имя пользователя -p порт, который сервер PostgreSQL прослушивает -f путь к сценарию SQL-a all echo-q quiet
Затем вам будет предложено ввести пароль пользователя.
РЕДАКТИРОВАТЬ: обновлено на основе комментария, предоставленного @zwacky
Если вы вошли в psql в оболочке Linux, команда будет следующей:
i fileName.sql
для абсолютного пути и
ir filename.sql
для относительного пути, откуда вы вызвали psql.
-
Как @ Флориан говорит, что после входа в систему вы можете запускать файл. Не забудьте пометить любые строки комментариев в вашем SQL одним из двух способов …— комментарий до конца строки a) — однострочный комментарий ИЛИ b)/* многострочный комментарий */- Sumit S 19 марта ’20 в 0 : 45
Если вы вошли в psql в оболочке Linux, команда выглядит так:
i fileName.sql
для абсолютного пути и
ir filename.sql
для относительного пути, откуда вы вызвали psql.
export PGPASSWORD = psql -h -d -U -p -a -w -f .sql

-
1как я могу сделать это без вывода — Lu32, 8 февраля 2016 г., 19:42
-
2psql -h -d -U -p -a -q -w -f .sql — vishu9219, 10 февраля 2016 г., 07:43
-
3@ Lu32 Вы также можете опустить флаг -a (что означает «Печатать все непустые строки ввода в стандартный вывод по мере их чтения»). РЕДАКТИРОВАТЬ проверено, без -a распечатывает меньше, но все равно слишком много информации. Итак, флаг -q правильный, как сказал vishu9219. — Рауни Лиллеметс 17 фев. В 12:14
export PGPASSWORD = psql -h -d -U - p -a -w -f .sql
Войдите в свою базу данных через терминал и попробуйте следующее:
database- #> @pathof_mysqlfile. sql
или
база данных - #> - i pathof_mysqlfile.sql
или
база данных - #> - c pathof_mysqlfile.sql

-
это решение более надежное, чем я; не тот, что отмечен как ответ — AlexG 14 дек. ’14 в 15:25
Через терминал войдите в свою базу данных и попробуйте следующее:
database- #> @ pathof_mysqlfile.sql
или
база данных - #> - i pathof_mysqlfile.sql
или
база данных - #> - c pathof_mysqlfile.sql
Вы можете указать имя пользователя и ПАРОЛЬ в самой командной строке.
psql "dbname = 'urDbName' user = 'yourUserName' password = 'yourPasswd' host = 'yourHost'" -f yourFileName.sql

Вы можете указать имя пользователя и ПАРОЛЬ в самой командной строке.
psql "dbname = 'urDbName' user = 'yourUserName' password = 'yourPasswd' host = 'yourHost'" -f yourFileName. sql
вы можете даже сделайте это таким образом:
sudo -u postgres psql -d myDataBase -a -f myInsertFile
Если у вас есть sudo
доступ на компьютере, и он не рекомендуется для производственных сценариев только для тестирования на вашем собственном компьютере. Это самый простой способ.


вы даже можете сделать это таким образом:
sudo -u postgres psql -d myDataBase -a -f myInsertFile
Если у вас есть доступ sudo
на компьютере, и он не рекомендуется для производственных сценариев только для тестирования самостоятельно машине это самый простой способ.
Рассмотрим, как запустить SQL в командной строке для PostgreSQL в Linux:
Откройте терминал и убедитесь, что вы можете запустить psql
команда:
psql --versionwhich psql
Моя версия 9.1.6 находится в /bin/psql
.
Создайте простой текстовый файл с именем mysqlfile.sql
Отредактируйте этот файл, поместите там одна строка:
select * from mytable;
Запустите эту команду в командной строке (подставляя свое имя пользователя и th e имя вашей базы данных для pgadmin и kurz_prod):
psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql
На терминале я получаю следующий результат (пароль не запрашивается):
select * from mytable; test1 -------- тоже hime (2 строки)


-
Как вы настраиваете пользователя? Я впервые устанавливаю и запускаю -f на новом. sql. Всегда говорит неправильный пароль — mKane 3 мая 2018 в 1:00
Рассмотрим, как запустить SQL в командной строке для PostgreSQL в Linux:
Откройте терминал и убедитесь, что вы можете запустить команду psql
:
psql --versionwhich psql
Моя версия 9.1.6 находится в /bin/psql
.
Создайте простой текстовый файл с именем mysqlfile. sql
Отредактируйте этот файл, поместив туда одну строку:
select * from mytable;
Запустите эту команду в командной строке (заменив ваше имя пользователя и имя вашей базы данных на pgadmin и kurz_prod):
psql -U pgadmin -d kur z_prod -a -f mysqlfile.sql
Вот результат, который я получаю на терминале (пароль мне не предлагается):
выберите * из mytable; test1 -------- тоже hime (2 строки)
Вы можете открыть командную строку и запустить ее от имени администратора. Затем введите
../bin> psql -fc:/...- h localhost -p 5432 -d databasename -U "postgres"
Пароль для пользователя postgres:
появится.
Введите свой пароль и введите. Я не мог видеть пароль, который я набирал, но на этот раз, когда я нажимаю клавишу ввода, он работает. На самом деле я загружал данные в базу данных.

-
Я думаю, вы имеете в виду
-d "postgres"
— amphetamachine 22 августа 2014, 14:21 -
@amphetamachine
-d
для имени базы данных, проверьтеpsql --help
— Yaz, 30 июня ’16 в 12:40
Вы можете открыть командную строку и запустить ее от имени администратора. Затем введите
../bin> psql -f c:/... -h localhost -p 5432 -d имя базы данных -U "postgres"
Появится пароль для пользователя postgres:
.
Введите свой пароль и войдите. Я не мог видеть пароль, который я набирал, но на этот раз, когда я нажимаю клавишу ввода, он работает. На самом деле я загружал данные в базу данных.
Я добился того, что написал (находится в каталоге, где находится мой скрипт)
:: 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)
Я добился того, что написал (находится в каталоге, где находится мой скрипт)
:: 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
выводит весь ввод из script и -f
выполняют команды из file.sql
в mydatabase
, затем завершают работу.
Я использую: psql (PostgreSQL) 10.12 на (Ubuntu 10.12-0ubuntu0.18.04.1)
Решение 2021 года
, если ваша база данных PostgreSQL находится в вашей системе локально.
имя базы данных psql
Если он размещен в сети
psql -h hostname dbname
Если у вас есть сомнения или вопросы, задавайте их в комментариях.

Решение 2021 года
, если ваша база данных PostgreSQL находится в вашей системе локально.
psql dbname
Если он размещен в сети
psql -h hostname dbname
Если у вас есть какие-либо сомнения или вопросы, задавайте их в комментариях.
как выполнять файлы .sql в базе данных postgres
Я использую базу данных postgres с PostGIS и PGAdmin. У меня есть много файлов .sql разных размеров, таких как 300 МБ, 280 МБ и т.д., которые нужно вставить в базу данных. Как лучше всего это сделать, например, с помощью кода Java или некоторых команд psql. Я также очень новичок в базе данных java и postgres. Пожалуйста, дайте мне совет.
Использовать psql
инструмент командной строки:
psql -f file_with_sql.sql
Эта команда выполняет все команды построчно (кроме случаев, когда файл содержит блоки BEGIN… END. В этом случае команды в блоках выполняются в транзакции). Чтобы обернуть все команды в транзакции, используйте переключатель - single-transaction
:
psql --single-transaction -f file_with_sql.sql
Дополнительные параметры:
psql --help

-
1Выполняется ли при этом весь файл sql за одну транзакцию или используется новая транзакция для каждой строки в файле? — Бен 19 мая ’17 в 16:58
Используйте инструмент командной строки psql
:
psql -f file_with_sql.sql
Эта команда выполняет все команды построчно (кроме случаев, когда файл содержит блоки BEGIN… END. В этом случае команды в блоках выполняются в транзакции) . Чтобы обернуть все команды в транзакции, используйте переключатель - single-transaction
:
psql --single-transaction -f file_with_sql. sql
Дополнительные параметры:
psql --help
Просто поместите его в командную строку после psql
:
psql example.sql
psql
возьмет файл и запустит каждый к серверу.
Если сервер не запущен на вашем компьютере, вам нужно будет указать имя хоста для компьютера и имя пользователя для входа на сервер с помощью:
psql -h server.postgres.com -U username example.sql
Чтобы отправить несколько файлов, просто перечислите их все:
psql example1.sql example2.sql example3.sql

-
1см. документацию PSQL — jabu.10245, 26 ноя 2015, в 17:19
-
У меня очень большие файлы, и они должны быть отправленным на другой сервер. так что через psql требуется много времени. есть ли способ сделать прямо из pgadmin? — sasikala 26 нояб., В 17:22
-
Лучше посмотрите ссылку ниже stackoverflow.com/questions/3204274/… — charan 26 ноя 2015 в 17:43
Просто поместите его в командную строку после psql
:
psql example.sql
psql
берет файл и запускает каждую строку на сервер.
Если сервер не запущен на вашем компьютере, вам нужно будет указать имя хоста для компьютера и имя пользователя для входа на сервер с помощью:
psql -h server.postgres.com -U имя пользователя example.sql
Чтобы отправить несколько файлов, просто перечислите их все:
psql example1 .sql example2.sql example3.sql
Другой подход — использовать команду psql i . Например,
Допустим, у нас есть файл run.sql по пути ~/sql/run. sql
$ cd ~/sql/$ psql -h -U
=> => i 'run.sql'
DONE
Другой подход — использовать команду psql i . Например,
Допустим, у нас есть файл run.sql по пути ~/sql/run.sql
$ cd ~/sql/$ psql -h -U
=> => i 'run.sql'
DONE