Как правильно экранировать символы в запросе командной строки PostgreSQL?

[servername]# su postgres -c 'cd ~; psql -c "SELECT * FROM pg_catalog.pg_user WHERE usename LIKE name;"'
ERROR:  column "name" does not exist
LINE 1: SELECT * FROM pg_catalog.pg_user WHERE usename LIKE name;
                                                            ^

Пробовал разными способами, но ни один из них не возвращает правильный ответ. Может быть, есть более красивый способ делать запросы из командной строки?

Вы пробовали: su postgres -c 'cd ~; psql -c "SELECT * FROM pg_catalog.pg_user WHERE usename LIKE \'name\';"' ?

D. Mika 18.11.2022 06:55

Да, он начинает ждать ввода, как если бы вы просто набрали «command1 \»

Алексей Пашнин 18.11.2022 06:59
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
2
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

/usr/local/pgsql15/bin/psql  -c "SELECT * FROM pg_catalog.pg_user WHERE usename like 'admin'"

сделать его двухстрочным.

/usr/local/pgsql15/bin/psql test15  -c  \
"SELECT * FROM pg_catalog.pg_user WHERE usename like 'admin'"

или

/usr/local/pgsql15/bin/psql test15  <<<"SELECT * FROM pg_catalog.pg_user WHERE usename like 'admin'"

или

echo "SELECT * FROM pg_catalog.pg_user WHERE usename like 'admin'" | /usr/local/pgsql15/bin/psql test15

знак процента все еще работает.

/usr/local/pgsql15/bin/psql test15  -c  \
"SELECT * FROM pg_catalog.pg_user WHERE usename like '%admi%'"

Проблема в том, что в одной строке мне нужно переключить пользователя и его каталог, иначе команда также не будет выполняться

Алексей Пашнин 18.11.2022 07:40

@АлексейПашнин используйте для psql опцию -U.

jian 18.11.2022 08:16

Мне нужно переключить пользователя ОС, а не пользователя БД

Алексей Пашнин 18.11.2022 08:25

Я знаю. это сложно. Я не знаю. один обходной путь: psql -U postgres. после того, как вы находитесь в psql, тогда \! изменить каталог.

jian 18.11.2022 08:37

пример: psql -U postgres -d postgres -c "\ du" return: psql: FATAL: одноранговая аутентификация не удалась для пользователя "postgres", поэтому мне не нужно использовать какой-либо пароль, мне нужно имитировать обычное использование командной строки путем переключения пользователь ОС

Алексей Пашнин 18.11.2022 08:38

можешь попробовать stackoverflow.com/questions/18664074/… тогда можешь попробовать sudo psql --host=localhost --dbname=database-name --username=postgres

jian 18.11.2022 08:42

Последняя cmd запрашивает ввод пароля, и способ из вопроса выше я видел, но не могу изменить конфиг файл

Алексей Пашнин 18.11.2022 09:15

Я нашел способ, напишите здесь отдельным ответом

Алексей Пашнин 18.11.2022 09:20
Ответ принят как подходящий
su postgres -c "cd ~; psql -c 'SELECT * FROM pg_catalog.pg_user WHERE usename LIKE '\'name\'';'"

Пожалуйста, не публикуйте только код в качестве ответа, но также объясните, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и качественны, и с большей вероятностью привлекут положительные голоса.

Mark Rotteveel 20.11.2022 10:30

Другие вопросы по теме

Похожие вопросы

Я всегда получаю сообщение об ошибке каждый раз, когда пытаюсь добавить данные в БД: SQLSTATE [42703]: Неопределенный столбец: 7 ОШИБКА: столбец
Psql: ошибка: подключение к серверу на «localhost» (:: 1), сбой порта 5432: FATAL: не удалось выполнить аутентификацию по паролю для пользователя «postgres»
Prisma Client Select запрос о наличии значения в объединенной таблице через схему
Найти дубликаты в таблице без первичного ключа
Преобразование SAS IFN(), HOUR() и MINUTE() в PostgreSQL
Интеграция JOOQ с драйвером R2dbc для PostgreSQL
Почему план выполнения Postgres сильно меняется в зависимости от условий
SQL - Как сгенерировать логическое значение на основе условия двух столбцов
Как найти экземпляры объектов, которые имеют общие отношения с другим объектом?
FastAPI, SQLalchemy; Используя Postman, я не могу правильно опубликовать необработанный запрос тела JSON. Он отлично работает с параметрами, а не с необработанным телом JSON.