Мне нужно изменить значение в таблице postgreSQL в докере с помощью одной команды. Я хочу запустить что-то подобное внутри контейнера:
su - postgres -c "psql -c \"\c database_name\" -c \"UPDATE table_name SET value_name = 'value';\""
Это оказалось единственным способом сделать это, потому что echo "\c database_name \\ UPDATE table_name SET value_name = 'value';" | psql
не работает в моем postgreSQL, что приводит к
invalid command \
Могу ли я что-нибудь сделать, чтобы запустить его в контейнере с помощью команды sudo docker exec -it container_name bash -c "*command above*"
? Ни один из типов кавычек, окружающих команду выше, не работает. Заранее спасибо!
Вы должны быть в состоянии избежать использования su
, сообщая docker exec
самому себе, какой пользователь должен запускать psql
. Вы также можете запустить psql
напрямую, а не запускать оболочку bash
, которая его выполняет.
sudo docker exec --user postgres \
psql -c "\c database_name" -c "UPDATE table_name SET value_name = 'value';"
Можете ли вы запустить
psql
непосредственно на хосте, подключившись к опубликованному порту контейнера базы данных? Это позволит избежать большинства этих слоев; вы даже можете записать команду SQL в локальный файл, чтобы вообще не цитировать.