Re: escape character for 'psql -c ' command

Поиск
Список
Период
Сортировка
От Derrick Rice
Тема Re: escape character for 'psql -c ' command
Дата
Msg-id AANLkTi=iJ3DiTYP7oq5S6LC1jeiS1_p4dGTQWpjQrhLq@mail.gmail.com
обсуждение исходный текст
Ответ на escape character for 'psql -c ' command  (Gary Fu <gfu@sigmaspace.com>)
Ответы Re: escape character for 'psql -c ' command  (Gary Fu <gfu@sigmaspace.com>)
Список pgsql-general
Short answer: for simple commands, you can use shell-escaping of a double-quoted string.

psql -c "\\copy \"Table\" from 'text file'"

Note: double \\ is intentional. You need to escape the backslash, which normally escapes other special characters, like $ and ". Watch out for other special characters though, which is why I prefer the long answer...


Long answer: A *nix shell will concatenate string literals that are immediately following each other, even when they aren't the same type (single quoted or double quoted).  So the following:

"abc"'def'hij"  (reads: double quote, abc, double quote, single quote, def, single quote, double quote, hij, double quote)

is "abc" + 'def' + "hij" or "abcdefhij" to the shell

So if you have a single-quoted string, to insert a single quote you (1) stop the single quoted string (2) start a double-quoted string (3) write a single quote as the content of the double-quoted string (4) stop the double-quoted string (5) restart the single quoted string.  All without any spaces (unless they are inside either the double or single quoted strings as part of your content).

You can obviously insert 2 consecutive single quotes within a single double-quoted string - or any characters... just be aware you are in double-quotes now, so you need to escape special characters or go back to single quotes.

Your example:

psql -c ' Copy "Table" from '"'"'text file'"'"

Derrick

On Mon, Nov 15, 2010 at 6:17 PM, Gary Fu <gfu@sigmaspace.com> wrote:
Hi,

How do I escape both " and ' to be used in the 'psql -c ' command ?
For example, how to make the psql command {\copy "Table" from 'txt_file'} to be used in the psql with -c option (psql -c) ?
The "Table" has to be double quoted here.

Thanks,
Gary

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

В списке pgsql-general по дате отправления:

Предыдущее
От: Gary Fu
Дата:
Сообщение: escape character for 'psql -c ' command
Следующее
От: Craig Ringer
Дата:
Сообщение: Re: when postgres failed to recover after the crash...