Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5b352d8

Browse files
committed
DROP DATABASE IF EXISTS variant
1 parent179211a commit5b352d8

File tree

8 files changed

+51
-14
lines changed

8 files changed

+51
-14
lines changed

‎doc/src/sgml/ref/drop_database.sgml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/ref/drop_database.sgml,v 1.20 2005/06/21 04:02:31 tgl Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/ref/drop_database.sgml,v 1.21 2005/11/22 15:24:17 adunstan Exp $
33
PostgreSQL documentation
44
-->
55

@@ -20,7 +20,7 @@ PostgreSQL documentation
2020

2121
<refsynopsisdiv>
2222
<synopsis>
23-
DROP DATABASE <replaceable class="PARAMETER">name</replaceable>
23+
DROP DATABASE[ IF EXISTS ]<replaceable class="PARAMETER">name</replaceable>
2424
</synopsis>
2525
</refsynopsisdiv>
2626

@@ -45,6 +45,16 @@ DROP DATABASE <replaceable class="PARAMETER">name</replaceable>
4545
<title>Parameters</title>
4646

4747
<variablelist>
48+
<varlistentry>
49+
<term><literal>IF EXISTS</literal></term>
50+
<listitem>
51+
<para>
52+
Do not throw an error if the database does not exist. A notice is issued
53+
in this case.
54+
</para>
55+
</listitem>
56+
</varlistentry>
57+
4858
<varlistentry>
4959
<term><replaceable class="PARAMETER">name</replaceable></term>
5060
<listitem>

‎src/backend/commands/dbcommands.c

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*
1616
*
1717
* IDENTIFICATION
18-
* $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.173 2005/10/15 02:49:15 momjian Exp $
18+
* $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.174 2005/11/22 15:24:17 adunstan Exp $
1919
*
2020
*-------------------------------------------------------------------------
2121
*/
@@ -551,7 +551,7 @@ createdb(const CreatedbStmt *stmt)
551551
* DROP DATABASE
552552
*/
553553
void
554-
dropdb(constchar*dbname)
554+
dropdb(constchar*dbname,boolmissing_ok)
555555
{
556556
Oiddb_id;
557557
booldb_istemplate;
@@ -585,9 +585,25 @@ dropdb(const char *dbname)
585585

586586
if (!get_db_info(dbname,&db_id,NULL,NULL,
587587
&db_istemplate,NULL,NULL,NULL,NULL,NULL))
588-
ereport(ERROR,
588+
{
589+
if (!missing_ok)
590+
{
591+
ereport(ERROR,
589592
(errcode(ERRCODE_UNDEFINED_DATABASE),
590593
errmsg("database \"%s\" does not exist",dbname)));
594+
}
595+
else
596+
{
597+
598+
/* Close pg_database, release the lock, since we changed nothing */
599+
heap_close(pgdbrel,ExclusiveLock);
600+
ereport(NOTICE,
601+
(errmsg("database \"%s\" does not exist, skipping",
602+
dbname)));
603+
604+
return;
605+
}
606+
}
591607

592608
if (!pg_database_ownercheck(db_id,GetUserId()))
593609
aclcheck_error(ACLCHECK_NOT_OWNER,ACL_KIND_DATABASE,

‎src/backend/nodes/copyfuncs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* Portions Copyright (c) 1994, Regents of the University of California
1616
*
1717
* IDENTIFICATION
18-
* $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.319 2005/11/21 12:49:31 alvherre Exp $
18+
* $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.320 2005/11/22 15:24:17 adunstan Exp $
1919
*
2020
*-------------------------------------------------------------------------
2121
*/
@@ -2261,6 +2261,7 @@ _copyDropdbStmt(DropdbStmt *from)
22612261
DropdbStmt*newnode=makeNode(DropdbStmt);
22622262

22632263
COPY_STRING_FIELD(dbname);
2264+
COPY_SCALAR_FIELD(missing_ok);
22642265

22652266
returnnewnode;
22662267
}

‎src/backend/nodes/equalfuncs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* Portions Copyright (c) 1994, Regents of the University of California
1919
*
2020
* IDENTIFICATION
21-
* $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.256 2005/11/21 12:49:31 alvherre Exp $
21+
* $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.257 2005/11/22 15:24:17 adunstan Exp $
2222
*
2323
*-------------------------------------------------------------------------
2424
*/
@@ -1188,6 +1188,7 @@ static bool
11881188
_equalDropdbStmt(DropdbStmt*a,DropdbStmt*b)
11891189
{
11901190
COMPARE_STRING_FIELD(dbname);
1191+
COMPARE_SCALAR_FIELD(missing_ok);
11911192

11921193
return true;
11931194
}

‎src/backend/parser/gram.y

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.514 2005/11/21 12:49:31 alvherre Exp $
14+
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.515 2005/11/22 15:24:17 adunstan Exp $
1515
*
1616
* HISTORY
1717
* AUTHORDATEMAJOR EVENT
@@ -4698,7 +4698,7 @@ alterdb_opt_item:
46984698

46994699
/*****************************************************************************
47004700
*
4701-
*DROP DATABASE
4701+
*DROP DATABASE [ IF EXISTS ]
47024702
*
47034703
* This is implicitly CASCADE, no need for drop behavior
47044704
*****************************************************************************/
@@ -4707,6 +4707,14 @@ DropdbStmt: DROP DATABASE database_name
47074707
{
47084708
DropdbStmt *n = makeNode(DropdbStmt);
47094709
n->dbname =$3;
4710+
n->missing_ok =FALSE;
4711+
$$ = (Node *)n;
4712+
}
4713+
| DROP DATABASE IF_P EXISTS database_name
4714+
{
4715+
DropdbStmt *n = makeNode(DropdbStmt);
4716+
n->dbname =$5;
4717+
n->missing_ok =TRUE;
47104718
$$ = (Node *)n;
47114719
}
47124720
;

‎src/backend/tcop/utility.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
*
1212
* IDENTIFICATION
13-
* $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.247 2005/11/21 12:49:32 alvherre Exp $
13+
* $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.248 2005/11/22 15:24:18 adunstan Exp $
1414
*
1515
*-------------------------------------------------------------------------
1616
*/
@@ -840,7 +840,7 @@ ProcessUtility(Node *parsetree,
840840
{
841841
DropdbStmt*stmt= (DropdbStmt*)parsetree;
842842

843-
dropdb(stmt->dbname);
843+
dropdb(stmt->dbname,stmt->missing_ok);
844844
}
845845
break;
846846

‎src/include/commands/dbcommands.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/commands/dbcommands.h,v 1.42 2005/10/15 02:49:44 momjian Exp $
10+
* $PostgreSQL: pgsql/src/include/commands/dbcommands.h,v 1.43 2005/11/22 15:24:18 adunstan Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -53,7 +53,7 @@ typedef struct xl_dbase_drop_rec
5353
}xl_dbase_drop_rec;
5454

5555
externvoidcreatedb(constCreatedbStmt*stmt);
56-
externvoiddropdb(constchar*dbname);
56+
externvoiddropdb(constchar*dbname,boolmissing_ok);
5757
externvoidRenameDatabase(constchar*oldname,constchar*newname);
5858
externvoidAlterDatabase(AlterDatabaseStmt*stmt);
5959
externvoidAlterDatabaseSet(AlterDatabaseSetStmt*stmt);

‎src/include/nodes/parsenodes.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.294 2005/11/21 12:49:32 alvherre Exp $
10+
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.295 2005/11/22 15:24:18 adunstan Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -1672,6 +1672,7 @@ typedef struct DropdbStmt
16721672
{
16731673
NodeTagtype;
16741674
char*dbname;/* database to drop */
1675+
boolmissing_ok;/* skip error if db is missing? */
16751676
}DropdbStmt;
16761677

16771678
/* ----------------------

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp