Как использовать слэш-команды вне базы данных? - PullRequest
0 голосов
/ 08 февраля 2012

Я пытался использовать запрос за пределами базы данных. То есть без входа в базу данных Я хочу получить результат. Я нашел вариант (-c). Используя эту опцию, мы можем выполнить запрос вне базы данных:

test:~$ psql  -U sat -c "select * from test.details";

Это дает выход. Я хочу использовать этот запрос для записи в crontab. Поэтому я попытался сохранить вывод в файле:

 test:~$ psql  -U sat -c "select * from test.details \g sat";

Произошла ошибка:

ERROR:  syntax error at or near "\"
LINE 1: select * from test.details \g sat

Как это сделать?

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Не существует такой вещи , как «запрос вне базы данных» или «без входа в базу данных».

Вы пытаетесь смешать мета-команды клиента psql с командами SQL, что строго невозможно. Метакоманды обратной косой черты интерпретируются клиентом psql, запросы SQL интерпретируются сервером базы данных.

Большинство метакоманд в psql фактически транслируются в (серию) SQL-запросов к серверу базы данных. Вы можете заставить psql печатать команды, которые он посылает ядру базы данных, если вы запускаете его с опцией команды -E в интерактивном режиме. Попробуйте:

psql -E mydb

А затем выполните любую команду с обратной косой чертой и просмотрите результат. В остальном ваш вопрос @aleroot уже дал хороший совет.

3 голосов
/ 08 февраля 2012

Это не косая черта, а обратная косая черта. Обратная косая черта - это escape-символ в строковых литералах PostgreSQL, поэтому вы должны удвоить его, чтобы получить одну обратную косую черту в реальных данных. Если вы хотите сохранить результат запроса в файл из командной строки, вы должны использовать параметр командной строки -o, поэтому ваш запрос станет:

psql  -o filename -U sathishkumar -c "select * from hospital_management.patient_details";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...