Postgres - npm скрипт для удаления / добавления базы данных - PullRequest
1 голос
/ 09 марта 2020

Я хочу упростить свою жизнь и автоматизировать процесс добавления / удаления моей тестовой базы данных с помощью сценария npm, однако я сталкиваюсь с проблемами.

Попытка 1:

"drop-db:local": "psql postgres \"drop database blog_db; create database blog_db; \\c blog_db; CREATE EXTENSION \"pgcrypto\";\""

После запуска я получаю следующую ошибку

psql: error: could not connect to server: FATAL:  Peer authentication failed for user "drop database blog_db; create database blog_db; \c "

Попытка 2:

изменено psql postgres на psql -h localhost -U rm postgres

Итак, это открывает базу данных в моем терминале, но, похоже, игнорирует некоторые вещи, как указано в сообщении ниже

psql: warning: extra command-line argument "drop database blog_db; create database blog_db; \c blog_db; CREATE EXTENSION pgcrypto;" ignored

Что я делаю не так?

Это список моих пользователей БД

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 rm        | Superuser, Create DB                                       | {}

версия БД: psql (12.2 (Ubuntu 12.2-2.pgdg18.04 + 1))

1 Ответ

2 голосов
/ 10 марта 2020

Вам необходимо использовать - c или -f с вашей командой psql. Как показывает справка psql:

-c, --command=COMMAND    run only single command (SQL or internal) and exit
-f, --file=FILENAME      execute commands from file, then exit

Поскольку вы используете несколько команд, вам лучше использовать -f, за которым следует sql имя файла, содержащее все команды, например, ваш drop_create_db. Файл sql может иметь следующий код:

drop database blog_db; 
create database blog_db; 
\c blog_db; 
CREATE EXTENSION "pgcrypto";

И вы можете запустить этот файл с помощью следующей команды

"drop-db:local": psql -U postgres -d postgres -p 5432 -f /tmp/drop_create_db.sql

Раскрытие информации: я работаю на EnterpriseDB (EDB)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...