According to this post, adding "if not exists" won't really help for race conditions. "The bottom line is that CREATE TABLE IF NOT EXISTS doesn't pretend to handle concurrency issues any better than regular old CREATE TABLE, which is to say not very well." - Robert Haas It still doesn't explain how the function got past creating the table, but failed on the index. If another thread was also creating the table then there should have been lock contention
on the create table statement. Thanks, Rob From:
"David G. Johnston" <david.g.johnston@xxxxxxxxx> On Thu, May 18, 2017 at 12:48 PM, Rob Brucks <rob.brucks@xxxxxxxxxxxxx> wrote:
I don't fully comprehend the locking involved here but if you want a failure while creating the table you shouldn't use "IF NOT EXISTS". On the other side adding "IF NOT EXISTS" to the CREATE INDEX will
supposedly prevent the error you are seeing. The trigger that failed to create the index also failed to create the table - it just didn't care because of the IF NOT EXISTS. At least this is what I am observing from your description. David J. |