Commit 5b352d8e authored by Andrew Dunstan's avatar Andrew Dunstan

parent 179211a6
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/drop_database.sgml,v 1.20 2005/06/21 04:02:31 tgl Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/drop_database.sgml,v 1.21 2005/11/22 15:24:17 adunstan Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -20,7 +20,7 @@ PostgreSQL documentation ...@@ -20,7 +20,7 @@ PostgreSQL documentation
<refsynopsisdiv> <refsynopsisdiv>
<synopsis> <synopsis>
DROP DATABASE <replaceable class="PARAMETER">name</replaceable> DROP DATABASE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
</synopsis> </synopsis>
</refsynopsisdiv> </refsynopsisdiv>
...@@ -45,6 +45,16 @@ DROP DATABASE <replaceable class="PARAMETER">name</replaceable> ...@@ -45,6 +45,16 @@ DROP DATABASE <replaceable class="PARAMETER">name</replaceable>
<title>Parameters</title> <title>Parameters</title>
<variablelist> <variablelist>
<varlistentry>
<term><literal>IF EXISTS</literal></term>
<listitem>
<para>
Do not throw an error if the database does not exist. A notice is issued
in this case.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><replaceable class="PARAMETER">name</replaceable></term> <term><replaceable class="PARAMETER">name</replaceable></term>
<listitem> <listitem>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.173 2005/10/15 02:49:15 momjian Exp $ * $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.174 2005/11/22 15:24:17 adunstan Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -551,7 +551,7 @@ createdb(const CreatedbStmt *stmt) ...@@ -551,7 +551,7 @@ createdb(const CreatedbStmt *stmt)
* DROP DATABASE * DROP DATABASE
*/ */
void void
dropdb(const char *dbname) dropdb(const char *dbname, bool missing_ok)
{ {
Oid db_id; Oid db_id;
bool db_istemplate; bool db_istemplate;
...@@ -585,9 +585,25 @@ dropdb(const char *dbname) ...@@ -585,9 +585,25 @@ dropdb(const char *dbname)
if (!get_db_info(dbname, &db_id, NULL, NULL, if (!get_db_info(dbname, &db_id, NULL, NULL,
&db_istemplate, NULL, NULL, NULL, NULL, NULL)) &db_istemplate, NULL, NULL, NULL, NULL, NULL))
ereport(ERROR, {
if (! missing_ok)
{
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_DATABASE), (errcode(ERRCODE_UNDEFINED_DATABASE),
errmsg("database \"%s\" does not exist", dbname))); errmsg("database \"%s\" does not exist", dbname)));
}
else
{
/* Close pg_database, release the lock, since we changed nothing */
heap_close(pgdbrel, ExclusiveLock);
ereport(NOTICE,
(errmsg("database \"%s\" does not exist, skipping",
dbname)));
return;
}
}
if (!pg_database_ownercheck(db_id, GetUserId())) if (!pg_database_ownercheck(db_id, GetUserId()))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_DATABASE, aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_DATABASE,
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.319 2005/11/21 12:49:31 alvherre Exp $ * $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.320 2005/11/22 15:24:17 adunstan Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -2261,6 +2261,7 @@ _copyDropdbStmt(DropdbStmt *from) ...@@ -2261,6 +2261,7 @@ _copyDropdbStmt(DropdbStmt *from)
DropdbStmt *newnode = makeNode(DropdbStmt); DropdbStmt *newnode = makeNode(DropdbStmt);
COPY_STRING_FIELD(dbname); COPY_STRING_FIELD(dbname);
COPY_SCALAR_FIELD(missing_ok);
return newnode; return newnode;
} }
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.256 2005/11/21 12:49:31 alvherre Exp $ * $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.257 2005/11/22 15:24:17 adunstan Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1188,6 +1188,7 @@ static bool ...@@ -1188,6 +1188,7 @@ static bool
_equalDropdbStmt(DropdbStmt *a, DropdbStmt *b) _equalDropdbStmt(DropdbStmt *a, DropdbStmt *b)
{ {
COMPARE_STRING_FIELD(dbname); COMPARE_STRING_FIELD(dbname);
COMPARE_SCALAR_FIELD(missing_ok);
return true; return true;
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.514 2005/11/21 12:49:31 alvherre Exp $ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.515 2005/11/22 15:24:17 adunstan Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -4698,7 +4698,7 @@ alterdb_opt_item: ...@@ -4698,7 +4698,7 @@ alterdb_opt_item:
/***************************************************************************** /*****************************************************************************
* *
* DROP DATABASE * DROP DATABASE [ IF EXISTS ]
* *
* This is implicitly CASCADE, no need for drop behavior * This is implicitly CASCADE, no need for drop behavior
*****************************************************************************/ *****************************************************************************/
...@@ -4707,6 +4707,14 @@ DropdbStmt: DROP DATABASE database_name ...@@ -4707,6 +4707,14 @@ DropdbStmt: DROP DATABASE database_name
{ {
DropdbStmt *n = makeNode(DropdbStmt); DropdbStmt *n = makeNode(DropdbStmt);
n->dbname = $3; n->dbname = $3;
n->missing_ok = FALSE;
$$ = (Node *)n;
}
| DROP DATABASE IF_P EXISTS database_name
{
DropdbStmt *n = makeNode(DropdbStmt);
n->dbname = $5;
n->missing_ok = TRUE;
$$ = (Node *)n; $$ = (Node *)n;
} }
; ;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.247 2005/11/21 12:49:32 alvherre Exp $ * $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.248 2005/11/22 15:24:18 adunstan Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -840,7 +840,7 @@ ProcessUtility(Node *parsetree, ...@@ -840,7 +840,7 @@ ProcessUtility(Node *parsetree,
{ {
DropdbStmt *stmt = (DropdbStmt *) parsetree; DropdbStmt *stmt = (DropdbStmt *) parsetree;
dropdb(stmt->dbname); dropdb(stmt->dbname, stmt->missing_ok);
} }
break; break;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/commands/dbcommands.h,v 1.42 2005/10/15 02:49:44 momjian Exp $ * $PostgreSQL: pgsql/src/include/commands/dbcommands.h,v 1.43 2005/11/22 15:24:18 adunstan Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -53,7 +53,7 @@ typedef struct xl_dbase_drop_rec ...@@ -53,7 +53,7 @@ typedef struct xl_dbase_drop_rec
} xl_dbase_drop_rec; } xl_dbase_drop_rec;
extern void createdb(const CreatedbStmt *stmt); extern void createdb(const CreatedbStmt *stmt);
extern void dropdb(const char *dbname); extern void dropdb(const char *dbname, bool missing_ok);
extern void RenameDatabase(const char *oldname, const char *newname); extern void RenameDatabase(const char *oldname, const char *newname);
extern void AlterDatabase(AlterDatabaseStmt *stmt); extern void AlterDatabase(AlterDatabaseStmt *stmt);
extern void AlterDatabaseSet(AlterDatabaseSetStmt *stmt); extern void AlterDatabaseSet(AlterDatabaseSetStmt *stmt);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.294 2005/11/21 12:49:32 alvherre Exp $ * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.295 2005/11/22 15:24:18 adunstan Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1672,6 +1672,7 @@ typedef struct DropdbStmt ...@@ -1672,6 +1672,7 @@ typedef struct DropdbStmt
{ {
NodeTag type; NodeTag type;
char *dbname; /* database to drop */ char *dbname; /* database to drop */
bool missing_ok; /* skip error if db is missing? */
} DropdbStmt; } DropdbStmt;
/* ---------------------- /* ----------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment