mirror of
https://github.com/postgres/postgres.git
synced 2025-11-07 19:06:32 +03:00
Implement IF NOT EXIST for CREATE INDEX.
Fabrízio de Royes Mello, reviewed by Marti Raudsepp, Adam Brightwell and me.
This commit is contained in:
@@ -674,6 +674,8 @@ UpdateIndexRelation(Oid indexoid,
|
||||
* will be marked "invalid" and the caller must take additional steps
|
||||
* to fix it up.
|
||||
* is_internal: if true, post creation hook for new index
|
||||
* if_not_exists: if true, do not throw an error if a relation with
|
||||
* the same name already exists.
|
||||
*
|
||||
* Returns the OID of the created index.
|
||||
*/
|
||||
@@ -697,7 +699,8 @@ index_create(Relation heapRelation,
|
||||
bool allow_system_table_mods,
|
||||
bool skip_build,
|
||||
bool concurrent,
|
||||
bool is_internal)
|
||||
bool is_internal,
|
||||
bool if_not_exists)
|
||||
{
|
||||
Oid heapRelationId = RelationGetRelid(heapRelation);
|
||||
Relation pg_class;
|
||||
@@ -773,10 +776,22 @@ index_create(Relation heapRelation,
|
||||
elog(ERROR, "shared relations must be placed in pg_global tablespace");
|
||||
|
||||
if (get_relname_relid(indexRelationName, namespaceId))
|
||||
{
|
||||
if (if_not_exists)
|
||||
{
|
||||
ereport(NOTICE,
|
||||
(errcode(ERRCODE_DUPLICATE_TABLE),
|
||||
errmsg("relation \"%s\" already exists, skipping",
|
||||
indexRelationName)));
|
||||
heap_close(pg_class, RowExclusiveLock);
|
||||
return InvalidOid;
|
||||
}
|
||||
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DUPLICATE_TABLE),
|
||||
errmsg("relation \"%s\" already exists",
|
||||
indexRelationName)));
|
||||
}
|
||||
|
||||
/*
|
||||
* construct tuple descriptor for index tuples
|
||||
|
||||
Reference in New Issue
Block a user