Re: Simple, but VERYuseful enhancement for psql command - or am I - Mailing list pgsql-general

From Jeff Eckermann
Subject Re: Simple, but VERYuseful enhancement for psql command - or am I
Date
Msg-id 20040227220354.15526.qmail@web20801.mail.yahoo.com
Whole thread Raw
In response to Re: Simple, but VERYuseful enhancement for psql command - or am I  (Nick Barr <nicky@chuckie.co.uk>)
List pgsql-general
--- Nick Barr <nicky@chuckie.co.uk> wrote:
> Ben wrote:
> > I'm designing a fairly involved database system.
> As part fo the process, I
> > use the \i [FILE] command a great deal. I set up
> fairly involved queries,
> > sometimes simply for the purpose of shortening
> column names so the output
> > is reasonable. For example:
> >
> > SELECT longname AS abbr,othername as "V" FROM
> table WHERE how;
> >
> > ...a bunch of these can result in a single-line
> output on the console,
> > which is a lot easier to deal with than a dump of
> the actual field names
> > which wraps around and makes you scroll back and
> forth trying to line up
> > the names with the values.

"man psql" is a good thing.  Especially the section on
variables, in Ben's case.  In summary, you can set a
variable in a psql session by "\set variablename
value", and refer to it in a query by ":variablename".
 This works for any value or identifier, i.e. psql
substitutes the variable value for the name before
sending the sql to the backend.  Works when used in
script files too.  I have used this a lot, and it's
handy.

Also, you may want to look at the "\x" command, and
its variations.  This will output column name/value
pairs down the page, which can be handy for viewing
large records.

> >
> > Now, in my case, I'm dealing with specific orders.
> So the WHERE clause
> > might be:
> >
> > ...WHERE zorder=104788;
> >
> > Which works fine. But, I have to edit the file
> every time I'm working with
> > a different order, which is repetative and
> annoying, something computers
> > are supposed to save us from. :)
> >
> > However, you can't leave it out; \i [FILE] expects
> the query to be
> > complete, ready to go to the server. As far as I
> can tell.
> >
> > So - how about a command to read a file into the
> input lines withOUT
> > sending it yet, so that its ready to type the last
> part, such as:
> >
> >    104788;
> >
> > In other words, the file would end here:
> >
> > ...WHERE zorder=104788;
> >                ^
> >                |
> >                |
> > ...then I could just type the number, hit enter,
> and off it would go.
> >
> > Or even if it has to be complete, right now, you
> can use \i [FILE] and it
> > runs, but you can't edit the thing with the line
> review editing tools...
> > it shows the \i [FILE] command, not what the
> command read. That would work
> > too, even if it caused a dummy read the first time
> you used it.
> >
> > Input, anyone?
> >
> > --Ben
> >
>
> I am not sure about this exactly, but a workaround
> could be using
> temporary sequences. I use these a lot in some of my
> more involved DB
> setup scripts.
>
> So for instance in the top level file you have:
>
> -------------------
> CREATE SEQUENCE temp_zorder_num_seq;
> SELECT setval('temp_zorder_num_seq', 104788);
>
> \i Somefile.sql
>
> DROP SEQUENCE
> -------------------
>
> The in any \i file you can just use:
>
> -------------------
> INSERT INTO some_table (zorder_num, ...) VALUES
> (currval('temp_zorder_num_seq'), ...);
> -------------------
>
> All you have to change is the setval at the top of
> the script. Make sure
> you drop the sequences though ;-).
>
>
> HTH
>
> Nick
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
>                http://archives.postgresql.org


__________________________________
Do you Yahoo!?
Get better spam protection with Yahoo! Mail.
http://antispam.yahoo.com/tools

pgsql-general by date:

Previous
From: "Augusto Cesar Castoldi"
Date:
Subject: RES: PostgreSQL in Cluster
Next
From: Tom Lane
Date:
Subject: Re: field must appear in the GROUP BY clause or be used