This CTE approach doesn't appear to play well with multiple concurrent
transactions/connections.

On Tue, Jan 13, 2015 at 10:05 AM, John McKown <john.archie.mck...@gmail.com>
wrote:

> On Tue, Jan 13, 2015 at 11:45 AM, Robert DiFalco <robert.difa...@gmail.com
> > wrote:
>
>> Thanks John. I've been seeing a lot of examples like this lately. Does
>> the following approach have any advantages over traditional approaches?
>> ​​
>>
>> WITH sel AS (
>>     SELECT id FROM hometowns WHERE name = 'Portland'
>> ), ins AS (
>>   INSERT INTO hometowns(name)
>>     SELECT 'Portland'
>>     WHERE NOT EXISTS (SELECT 1 FROM sel)
>>   RETURNING id
>> )
>> INSERT INTO users(name, hometown_id)
>>     VALUES ('Robert', SELECT id FROM ins UNION ALL SELECT id FROM sel);
>>
>>
>>
> ​Oh, that is very clever. I've not see such a thing before. Thanks.​
>
> ​I've added it to my stable of "tricks". Which aren't really tricks, just
> really nice new methods to do something.
>
> ​The main advantage that I can see is that it is a single SQL statement to
> send to the server. That makes it "self contained" so that it would be more
> difficult for someone to accidentally mess it up. On the other hand, CTEs
> are still a bit new (at least to me) and so the "why it works" might not be
> very obvious to other programmers who might need to maintain the
> application.​ To many this "lack of obviousness" is a detriment. To me, it
> means "update your knowledge". But then, I am sometimes a arrogant BOFH.
> Add that to my being an surly old curmudgeon, and you can end up with some
> bad advice when in a "corporate" environment. The minus, at present, is
> that it is "clever" and so may violate corporate coding standards due to
> "complexity". Or maybe I just work for a staid company.
>
> --
> ​
> While a transcendent vocabulary is laudable, one must be eternally careful
> so that the calculated objective of communication does not become ensconced
> in obscurity.  In other words, eschew obfuscation.
>
> 111,111,111 x 111,111,111 = 12,345,678,987,654,321
>
> Maranatha! <><
> John McKown
>

Reply via email to