On Tue, Apr 24, 2012 at 08:12:10AM +1000, Chris Angelico wrote:
> On Tue, Apr 24, 2012 at 6:49 AM, Nick Apperson <apper...@gmail.com> wrote:
> > There are obviously workarounds for this, but I'm wondering why
> > the following query shouldn't work. It seems like it should. With
> > MVCC already present on the back-end, I can't see any reason other
> > than additional parsing routines that this couldn't work:
> >
> > INSERT INTO old_login_id_to_new_account_id(new_account_id,
> > old_login_id) INSERT INTO accounts(id, username, password_hash,
> > email) SELECT DEFAULT, username, password_hash, email FROM
> > logins_old RETURNING id, logins_old.id;
> 
> That's possible using WITH. I made a statement that creates an
> invoice and its lines (with the lines all having a foreign-key
> reference to the owning invoice) more or less the same way:
> 
> WITH inv AS (insert into ... returning id), constants AS (values
> (...),(...),(...)) INSERT INTO invoicelines (columnlist) SELECT
> inv.id,constants.* FROM inv,constants
> 
> Something like that. I do remember running into trouble with the
> multi-row insert (can't use multiple rows of literals with SELECT,
> and can't fetch data from a WITH expression with VALUES), so it had
> to go to the extra level of structure. If you're inserting just one
> row into each, this should be easy.
> 
> Of course, the question I never asked (never bothered to, really)
> was: Is it really any better than simply doing the first insert and
> retrieving the ID in my application? :)

One crucial difference is the number of round trips to the database.

Cheers,
David.
-- 
David Fetter <da...@fetter.org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fet...@gmail.com
iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

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

Reply via email to