Re: [HACKERS] Getting OID in psql of recent insert - Mailing list pgsql-hackers

From Peter Eisentraut
Subject Re: [HACKERS] Getting OID in psql of recent insert
Date
Msg-id Pine.LNX.4.20.9911200323100.1512-100000@localhost.localdomain
Whole thread Raw
In response to Re: [HACKERS] Getting OID in psql of recent insert  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: [HACKERS] Getting OID in psql of recent insert
List pgsql-hackers
On 1999-11-18, Tom Lane mentioned:

> It'd certainly be easy enough for psql to save off the OID anytime it
> gets an "INSERT nnn" command response.  The missing link is to invent
> a way for a psql script to access that value and insert it into
> subsequent SQL commands.

Okay, I guess I'm way ahead of everyone here. It is in fact only a matter
of adding a few lines to save the oid in a variable, and all the
infrastructure for doing this is already present. In fact, I was going to
do this in the next few days.

testdb=> \set singlestep on
testdb=> \set sql_interpol '#'
testdb=> \set foo 'pg_class'
testdb=> select * from #foo#;
***(Single step mode: Verify query)**************
QUERY: select * from pg_class
***(press return to proceed or enter x and return to
cancel)********************
x
testdb=>

> If you want to attack this, I'd suggest thinking a little larger than
> just the last-OID problem.  I'd like to be able to save off both
> insertion OIDs and values extracted by SELECTs into named variables
> of some sort, and then insert those values into as many later commands
> as I want.  Right now there's no way to do any such thing in a psql
> script; you have to move up a level of difficulty into ecpg or pgtcl
> or even C code if your application needs this.  Plain psql scripts
> would become substantially more powerful if psql had a capability
> like this.

Hmm, saving the SELECT results in a variable sounds like a great
idea. I'll work on that. But in general, all the framework for this sort
of thing is already there as you see.

> OTOH: we shouldn't ask psql to do everything under the sun.  I'd
> certainly think that it'd be unreasonable to try to do conditional
> evaluation or looping in psql scripts, for instance.  Maybe the right

I actually had (simple) conditional expressions on my list, but loops are
not possible in the current design. Since I just redesigned it, I am quite
hesitant to changing the design again.

> answer is to teach people a little bit about using honest-to-goodness
> scripting languages when their applications reach this level of
> complexity.  How much daylight is there between needing script
> variables and needing control flow, do you think?

Good question. It has been bothering me all along. The best answer to this
is probably an interactive interpreter of some procedural language we
offer. (I recall Oracle has their frontend that way.) Adding any more
complex functionality to psql will probably cripple it beyond recognition.
You can only go so far with hand-written parsers acting on poorly
specified rules consisting of tons of backslashes. :)

Anyway, good to see that all this "thinking big" might have had a point
after all.
-Peter

-- 
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden



pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: RE: [HACKERS] 7.0 status request
Next
From: Tom Lane
Date:
Subject: Re: [HACKERS] New regression driver