Hello,

I am a PostgreSQL major contributor, currently undertaking development
of a feature sometimes called "UPSERT" for PostgreSQL.

Jacob Kaplan-Moss is an acquaintance and co-worker, and I know that
it's certainly something that interests him personally - presumably he
has some ideas on how an UPSERT-like feature could be used by Django.
Beyond that, I don't have a good sense of what the level of interest
is in the Django community. I would like to reach out and get feedback
on the syntax that I've proposed on the pgsql-hackers development
list. Certainly, I've put a lot of work into this, and expect to put a
lot more in, so obviously it's important that we not make any missteps
with user-visible semantics. I've used Django a bit in the past, and
my general impression is that the Django development community has
made sound technical decisions, so I'm happy to take your concerns as
representative of the concerns of ORM authors and web frameworks
generally.

This is a non-standard syntax that is somewhat comparable to MySQL's
INSERT ... ON DUPLICATE KEY UPDATE, while being more flexible and
safe. The SQL standard's MERGE statement is kind of weird, and has a
lot of baggage from trying to serve multiple use-cases, so I avoided
trying to implement that, preferring to focus on something that has
simple atomic insert-or-update semantics - what people seem to
actually want.

I would like to get a sense of:

* Would you consider the syntax that I've proposed a good one?

* If it was available, would you use it in future versions of Django?
Do you think the plugins ecosystem could take advantage of it sooner?
Is the demand there?

* What could be better about the feature?

* How are you using the MySQL feature (INSERT ... ON DUPLICATE KEY
UPDATE), if at all? Do you think it would be useful to have some
degree of compatibility with it? Why or why not?

I've built html user-facing documentation, which is publicly
available. This page is probably of most interest -- there is
extensive discussion of the new "ON CONFLICT UPDATE/IGNORE" clause:

http://postgres-benchmarks.s3-website-us-east-1.amazonaws.com/on-conflict-docs/sql-insert.html

These may be of some interest (search for "on conflict" to see the new
references to the feature):

http://postgres-benchmarks.s3-website-us-east-1.amazonaws.com/on-conflict-docs/transaction-iso.html
http://postgres-benchmarks.s3-website-us-east-1.amazonaws.com/on-conflict-docs/ddl-inherit.html
http://postgres-benchmarks.s3-website-us-east-1.amazonaws.com/on-conflict-docs/sql-createrule.html
http://postgres-benchmarks.s3-website-us-east-1.amazonaws.com/on-conflict-docs/trigger-definition.html
http://postgres-benchmarks.s3-website-us-east-1.amazonaws.com/on-conflict-docs/sql-createtrigger.html
http://postgres-benchmarks.s3-website-us-east-1.amazonaws.com/on-conflict-docs/index-unique-checks.html
http://postgres-benchmarks.s3-website-us-east-1.amazonaws.com/on-conflict-docs/sql-createview.html
http://postgres-benchmarks.s3-website-us-east-1.amazonaws.com/on-conflict-docs/postgres-fdw.html

If you feel like actually trying out my patch, you can download the
latest version of the patchset from:

http://www.postgresql.org/message-id/CAM3SWZRvkCKc=1Y6_Wn8mk97_Vi8+j-aX-RY-=msrjvu-ec...@mail.gmail.com

You'll need to build PostgreSQL from the git master branch (which
includes dependencies on things like Flex and Bison), with the patch
set applied. There are guides to doing this on the internet, including
this one: http://www.postgresql.org/docs/devel/static/sourcerepo.html

Thanks!
-- 
Peter Geoghegan

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at http://groups.google.com/group/django-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/CAM3SWZSAAK-nSpBuFDpz5KDGPJxNRAE7OGe2sf30Zu0UYCkwNA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to