Re: escape character for 'psql -c ' command

From: Gary Fu <gfu(at)sigmaspace(dot)com>
To: Derrick Rice <derrick(dot)rice(at)gmail(dot)com>
Subject: Re: escape character for 'psql -c ' command
Date: 2010-11-16 16:45:29
Message-ID: 4CE2B529.8050907@sigmaspace.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 11/15/10 21:10, Derrick Rice wrote:
> Short answer: for simple commands, you can use shell-escaping of a
> double-quoted string.
>
> psql -c "\\copy \"Table\" from 'text file'"
>

This works on sh, but I tried this syntax on tcsh, it fails:

11:38am 72 gfu(at)modular:~/sybase2postgres> psql -c "\\copy \"Table\" from
'text file'"
Unmatched ".

How to make it work on tcsh ?

Thanks,
Gary

> 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(at)sigmaspace(dot)com
> <mailto:gfu(at)sigmaspace(dot)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(at)postgresql(dot)org
> <mailto:pgsql-general(at)postgresql(dot)org>)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>
>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message maarten 2010-11-16 16:49:31 Re: Counting boolean values (how many true, how many false)
Previous Message Adrian Klaver 2010-11-16 16:41:13 Re: Counting boolean values (how many true, how many false)