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

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


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

  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

537

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

Попробуйте это, мне это подходит 🙂

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

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

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

Улучшите это ответ
изменён 03 февраля 2018 в 17:30
Yash Sharma
1,63411 золотых знаков1616 серебряных знаков2222 бронзовых знака
ответил 23 августа 2012 в 17:57
  • 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  

337

Делать это нужно так:

   i path_to_sql_file  

См.:

Улучшите этот ответ
отредактировано 27 декабря 2016 года в 11:39
Peter Mortensen
27.4k2121 золотых знака9393 серебряных знака123123 бронзовых знака
ответил 4 октября ’14 в 12:00
  • 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   

См.:


63

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

Улучшите этот ответ
отредактировано 17 июня ’19 в 13:35
cegas
2,02522 золотых знака1212 серебряных знаков1616 бронзовых знаков
ответил 10 августа ’16 в 13:30
  • 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


52

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

   i fileName.sql  

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

   ir filename.sql  

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

Улучшите этот ответ
ответил 13 фев, в 13:25
  • Как @ Флориан говорит, что после входа в систему вы можете запускать файл. Не забудьте пометить любые строки комментариев в вашем SQL одним из двух способов …— комментарий до конца строки a) — однострочный комментарий ИЛИ b)/* многострочный комментарий */- Sumit S 19 марта ’20 в 0 : 45
добавить комментарий |

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

   i fileName.sql  

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

   ir filename.sql  

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


49
  export PGPASSWORD =  psql -h  -d  -U  -p  -a -w -f  .sql  

Улучшите этот ответ
отредактировал 9 октября 2015, в 14:05
Альбан
322 бронза значки
ответил 10 марта ’15 в 07:29
  • 1
    как я могу сделать это без вывода — Lu32, 8 февраля 2016 г., 19:42
  • 2
    psql -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 

28

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

  database- #> @pathof_mysqlfile. sql  

или

  база данных - #> - i pathof_mysqlfile.sql  

или

  база данных - #> - c pathof_mysqlfile.sql  

Улучшите этот ответ
отредактировано 27 декабря 2016 г. в 11:33
Peter Mortensen
27.4k2121 золотых знака9393 серебряных знака123123 бронзовых знака
ответил 26 ноября ’12 в 8:11
  • это решение более надежное, чем я; не тот, что отмечен как ответ — AlexG 14 дек. ’14 в 15:25
добавить комментарий |

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

  database-  #> @ pathof_mysqlfile.sql  

или

  база данных - #> - i pathof_mysqlfile.sql  

или

  база данных - #> - c pathof_mysqlfile.sql  

19

Вы можете указать имя пользователя и ПАРОЛЬ в самой командной строке.

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

Улучшить этот ответ
ответ дан 12 января ’17 в 21:49
Это работает, если вы не хотите устанавливать переменные среды или использовать странные файлы проходов. =) — мартин, 27 окт. 2017, в 11:16
  • это должен был быть принятый ответ, спасибо — grepit 9 июня ’20 в 20:58
  • добавить комментарий |

    Вы можете указать имя пользователя и ПАРОЛЬ в самой командной строке.

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

    15

    вы можете даже сделайте это таким образом:

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

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

    Улучшите этот ответ
    отредактировано 2 ноября ’17 в 9:11
    Равиндер Редди
    22,1k66 золотых значков 4444 серебра 7474 бронзовых знака
    ответ дан 28 июля ’17 в 21:43
    добавить комментарий |

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

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

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


    11

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

    Улучшите этот ответ
    отредактировано 27 декабря ’16 в 11:32
    Peter Mortensen
    27.4k2121 золотой знак9393 серебряных знака123123 бронзовых знака
    ответил 16 окт. 2012 в 15:04
    • Как вы настраиваете пользователя? Я впервые устанавливаю и запускаю -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 строки)  

    4

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

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

    Пароль для пользователя postgres: появится.

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

    Улучшите этот ответ
    отредактировано 27 декабря ’16 в 11:34
    Peter Mortensen
    27.4k2121 золотой знак9393 серебряных знака123123 бронзовых знака
    ответил 8 марта ’13 в 18:04
    • Я думаю, вы имеете в виду -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: .

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


    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)

    Улучшите этот ответ
    отредактировано 13 апр.2020 в 13:04
    gypsyCoder
    2,03511 золотых знаков1111 серебряных знаков2020 бронзовых знаков
    ответил 12 апр. ’20 в 8:34
    добавить комментарий |

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

       :: 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)


    0

    Решение 2021 года

    , если ваша база данных PostgreSQL находится в вашей системе локально.

      имя базы данных psql   

    Если он размещен в сети

      psql -h hostname dbname   

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

    Улучшите этот ответ
    ответил 9 января в 4:29
    добавить комментарий |

    Решение 2021 года

    , если ваша база данных PostgreSQL находится в вашей системе локально.

      psql dbname  

    Если он размещен в сети

      psql -h hostname dbname  

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



    как выполнять файлы .sql в базе данных postgres

    Я использую базу данных postgres с PostGIS и PGAdmin. У меня есть много файлов .sql разных размеров, таких как 300 МБ, 280 МБ и т.д., которые нужно вставить в базу данных. Как лучше всего это сделать, например, с помощью кода Java или некоторых команд psql. Я также очень новичок в базе данных java и postgres. Пожалуйста, дайте мне совет.


    38

    Использовать psql инструмент командной строки:

      psql -f file_with_sql.sql  

    Эта команда выполняет все команды построчно (кроме случаев, когда файл содержит блоки BEGIN… END. В этом случае команды в блоках выполняются в транзакции). Чтобы обернуть все команды в транзакции, используйте переключатель - single-transaction :

      psql --single-transaction -f file_with_sql.sql  

    Дополнительные параметры:

      psql --help  

    Улучшить этот ответ
    отредактировано 19 мая ’17 в 19:34
    ответил 26 ноя., В 18:33
    • 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  

    11

    Просто поместите его в командную строку после psql :

      psql example.sql  

    psql возьмет файл и запустит каждый к серверу.

    Если сервер не запущен на вашем компьютере, вам нужно будет указать имя хоста для компьютера и имя пользователя для входа на сервер с помощью:

      psql -h server.postgres.com -U username example.sql  

    Чтобы отправить несколько файлов, просто перечислите их все:

      psql example1.sql example2.sql example3.sql  

    Улучшите этот ответ
    отредактировано 26 ноября 2015 г. в 17:50
    jabu.10245
    1,7841010 серебряных знаков1919 бронзовых знаков
    ответил 26 ноя., 17:13
    • 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  

    2

    Другой подход — использовать команду psql i . Например,

    Допустим, у нас есть файл run.sql по пути ~/sql/run. sql

      $ cd ~/sql/$ psql -h  -U   
       =>  =>  i 'run.sql'  

    DONE

    Улучшить этот ответ
    ответил 22 июля ’20 в 16:07
    добавить комментарий |

    Другой подход — использовать команду psql i . Например,

    Допустим, у нас есть файл run.sql по пути ~/sql/run.sql

      $ cd ~/sql/$ psql -h  -U   
       =>  =>  i 'run.sql'  

    DONE

    Оцените статью
    logicle.ru
    Добавить комментарий