Запустіть файл .grev PostgreSQL, використовуючи аргументи командного рядка


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 зазвичай можна знайти в папці "дані" вашої установки PostgreSQL.


6
Ви вже отримали свою відповідь, але про всяк випадок ... "Я нічого не можу ввести", ви можете говорити про те, що введення пароля нічого не показує? Це нормально в цьому випадку: нормально вводити пароль і
натискати

У мене була схожа проблема з установкою копії ITIS ( itis.gov ). Бази даних не існувало, тому я не міг використовувати її ім'я. Через те, як працює PostgreSQL, я міг би це зробити: psql --port = 5554 --username = root --file = шаблон
ITIS.sql1

Відповіді:


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 надзвичайно просто. Просто додайте один рядок, що містить хост: port: db: user: перехід у файл, і ви закінчите. Хороша робота.
Кріль

494

Звичайно, ви отримаєте фатальну помилку при автентифікації, оскільки ви не включаєте ім'я користувача ...

Спробуйте це, для мене це добре :)

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

Якщо база даних віддалена, використовуйте ту саму команду з хостом

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

4
Зауважте, що надане ім'я користувача повинно бути дійсною роллю постгресів. За замовчуванням - це поточно зареєстрований користувач.
matthias krull

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
Дейв

50

Використовуйте це для виконання * .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

Потім вам буде запропоновано ввести пароль користувача.

EDIT: оновлено на основі коментаря, наданого @zwacky


5
@ ChickenWing24 -a: все відлуння -q: спокійне, -f: Файл
zwacky

Цей вирішив мою власну проблему, чудово
Темі 'Топсі' Белло

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

1
як я можу це зробити без результатів
Lu32

2
psql -h <host> -d <база даних> -U <ім'я_користувача> -p <port> -a -q -w -f <файл> .sql
vishu9219

3
@ Lu32 Ви також можете залишити прапор -a (що означає "Друкувати всі непорожні рядки вводу на стандартний вихід, коли вони читаються"). Тестується EDIT, без -а він видає менше, але все-таки занадто багато інформації. Отже прапор -q правильний, як сказав vishu9219.
Рауні Ліллемець

41

Якщо ви ввійшли в psql на оболонці Linux, команда:

\i fileName.sql

за абсолютний шлях і

\ir filename.sql

для відносного шляху, звідки ви назвали psql.


Як говорить @Florian, після входу в систему ви можете виконати файл. Не забудьте позначити будь-які рядки коментарів у SQL як один із двох способів ...-- коментар до кінця рядка а) - коментар до одного рядка АБО б) / * кілька рядкових коментарів * /
Sumit S

26

Через термінал увійдіть у вашу базу даних і спробуйте це:

database-# >@pathof_mysqlfile.sql

або

database-#>-i pathof_mysqlfile.sql

або

database-#>-c pathof_mysqlfile.sql

це рішення є більш твердим, як на мене; не той, який позначений як
answe

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: з’явиться

Введіть свій пароль і введіть. Я не міг побачити пароль, що я набрав, але цього разу, коли натискаю клавішу Enter, це спрацювало. Насправді я завантажував дані в базу даних.


Я думаю, ти маєш на увазі-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.