diff options
| author | Tom Lane | 2014-07-02 00:10:38 +0000 |
|---|---|---|
| committer | Tom Lane | 2014-07-02 00:10:38 +0000 |
| commit | fbb1d7d73f8e23a3a61e702629c53cef48cb0918 (patch) | |
| tree | b0f1f20d6dc19568f0916cc33e3aeb7caa263f89 /src/bin | |
| parent | 15c82efd6994affd1d5654d13bc8911a9faff659 (diff) | |
Allow CREATE/ALTER DATABASE to manipulate datistemplate and datallowconn.
Historically these database properties could be manipulated only by
manually updating pg_database, which is error-prone and only possible for
superusers. But there seems no good reason not to allow database owners to
set them for their databases, so invent CREATE/ALTER DATABASE options to do
that. Adjust a couple of places that were doing it the hard way to use the
commands instead.
Vik Fearing, reviewed by Pavel Stehule
Diffstat (limited to 'src/bin')
| -rw-r--r-- | src/bin/initdb/initdb.c | 6 | ||||
| -rw-r--r-- | src/bin/pg_dump/pg_dumpall.c | 10 | ||||
| -rw-r--r-- | src/bin/psql/tab-complete.c | 7 |
3 files changed, 8 insertions, 15 deletions
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 5228f134222..a25965ce4c9 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -2288,11 +2288,7 @@ make_template0(void) PG_CMD_DECL; const char **line; static const char *template0_setup[] = { - "CREATE DATABASE template0;\n", - "UPDATE pg_database SET " - " datistemplate = 't', " - " datallowconn = 'f' " - " WHERE datname = 'template0';\n", + "CREATE DATABASE template0 IS_TEMPLATE = true ALLOW_CONNECTIONS = false;\n", /* * We use the OID of template0 to determine lastsysoid diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index 0cc4329b1a1..9dec6f3b141 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -1374,19 +1374,15 @@ dumpCreateDB(PGconn *conn) appendPQExpBuffer(buf, " TABLESPACE = %s", fmtId(dbtablespace)); + if (strcmp(dbistemplate, "t") == 0) + appendPQExpBuffer(buf, " IS_TEMPLATE = true"); + if (strcmp(dbconnlimit, "-1") != 0) appendPQExpBuffer(buf, " CONNECTION LIMIT = %s", dbconnlimit); appendPQExpBufferStr(buf, ";\n"); - if (strcmp(dbistemplate, "t") == 0) - { - appendPQExpBufferStr(buf, "UPDATE pg_catalog.pg_database SET datistemplate = 't' WHERE datname = "); - appendStringLiteralConn(buf, dbname, conn); - appendPQExpBufferStr(buf, ";\n"); - } - if (binary_upgrade) { appendPQExpBufferStr(buf, "-- For binary upgrade, set datfrozenxid.\n"); diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index be5c3c5f450..bab03572352 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1021,7 +1021,8 @@ psql_completion(const char *text, int start, int end) pg_strcasecmp(prev2_wd, "DATABASE") == 0) { static const char *const list_ALTERDATABASE[] = - {"RESET", "SET", "OWNER TO", "RENAME TO", "CONNECTION LIMIT", NULL}; + {"RESET", "SET", "OWNER TO", "RENAME TO", "IS_TEMPLATE", + "ALLOW_CONNECTIONS", "CONNECTION LIMIT", NULL}; COMPLETE_WITH_LIST(list_ALTERDATABASE); } @@ -2111,8 +2112,8 @@ psql_completion(const char *text, int start, int end) pg_strcasecmp(prev2_wd, "DATABASE") == 0) { static const char *const list_DATABASE[] = - {"OWNER", "TEMPLATE", "ENCODING", "TABLESPACE", "CONNECTION LIMIT", - NULL}; + {"OWNER", "TEMPLATE", "ENCODING", "TABLESPACE", "IS_TEMPLATE", + "ALLOW_CONNECTIONS", "CONNECTION LIMIT", NULL}; COMPLETE_WITH_LIST(list_DATABASE); } |
