diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-08-26 16:05:18 +0300 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-08-26 16:18:17 +0300 |
commit | 0076f264b6f24854219d49b159602e2042c38ee7 (patch) | |
tree | 7ea7316c5c6bf9ebbffb9b980d0123a2d68c6b0a /src/backend/commands/sequence.c | |
parent | 57ca1d4f0175f60e9cfb0f997c864173d9c72607 (diff) | |
download | postgresql-0076f264b6f24854219d49b159602e2042c38ee7.tar.gz postgresql-0076f264b6f24854219d49b159602e2042c38ee7.zip |
Implement IF NOT EXISTS for CREATE SEQUENCE.
FabrÃzio de Royes Mello
Diffstat (limited to 'src/backend/commands/sequence.c')
-rw-r--r-- | src/backend/commands/sequence.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index e6084203a88..3b89dd009bc 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -122,6 +122,24 @@ DefineSequence(CreateSeqStmt *seq) (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unlogged sequences are not supported"))); + /* + * If if_not_exists was given and a relation with the same name already + * exists, bail out. (Note: we needn't check this when not if_not_exists, + * because DefineRelation will complain anyway.) + */ + if (seq->if_not_exists) + { + RangeVarGetAndCheckCreationNamespace(seq->sequence, NoLock, &seqoid); + if (OidIsValid(seqoid)) + { + ereport(NOTICE, + (errcode(ERRCODE_DUPLICATE_TABLE), + errmsg("relation \"%s\" already exists, skipping", + seq->sequence->relname))); + return InvalidOid; + } + } + /* Check and set all option values */ init_params(seq->options, true, &new, &owned_by); @@ -210,7 +228,7 @@ DefineSequence(CreateSeqStmt *seq) stmt->options = NIL; stmt->oncommit = ONCOMMIT_NOOP; stmt->tablespacename = NULL; - stmt->if_not_exists = false; + stmt->if_not_exists = seq->if_not_exists; seqoid = DefineRelation(stmt, RELKIND_SEQUENCE, seq->ownerId); Assert(seqoid != InvalidOid); |