Проблема с интерпретацией строки в кавычках при использовании командной строки psql - PullRequest
0 голосов
/ 07 ноября 2018

Предположим, что одна из таблиц в базе данных PostgreSQL 10 называется «Измерение» и имеет (среди прочих) столбец с именем «Имя» текстового типа.

Я хотел бы перечислить все записи с определенным именем, поэтому оператор SQL:

SELECT * FROM public."Measurement" WHERE "Measurement"."Name" = 'nazwa1';

отлично работает в редакторе SQL pgAdmin.

Я хотел бы спросить сервер о том же, но с psql, работающим в командной строке на Ubuntu, что-то вроде этого:

psql --host 127.0.0.1 --dbname BazaDanych --username postgres --port 5432 --echo-all --no-align --command 'SELECT * FROM public."Measurement" WHERE "Measurement"."Name" = 'nazwa1';' --log-file /home/user/wynik.log -o /home/user/dane.csv -P fieldsep=',' -P footer='off'

Это не работает, так как одна кавычка из этого оператора не распознается оболочкой, и это вызывает проблему, о которой сообщается как «столбец не существует», следующим образом:

public."Measurement" WHERE "Measurement"."Name" = nazwa1

Строка 'nazwa1' интерпретируется не как значение для сравнения с записями, а как имя столбца.

Я пробовал много способов, таких как: \ ', двойная одинарная кавычка и многие другие, но безуспешных результатов.

Как обойти это? Может ли кто-нибудь исправить мою команду?

1 Ответ

0 голосов
/ 07 ноября 2018

К счастью, я нашла это!

Требуются два шага:

  1. Заменить внешние одинарные кавычки на кавычки ('-> ")
  2. Добавить \ перед внутренними кавычками ("-> \")

Итак, код ниже работает нормально:

psql --host 127.0.0.1 --dbname BazaDanych --username postgres --port 5432 --echo-all --no-align --command "SELECT * FROM public.\"Measurement\" WHERE \"Measurement\".\"Name\" = 'nazwa1';" --log-file /home/user/wynik.log -o /home/user/dane.csv -P fieldsep=',' -P footer='off'

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

...