没有显式数据库名称的当前数据库上的ALTER DATABASE?

时间:2012-02-17 15:53:29

标签: sql postgresql

我希望能够编写更改数据库的sql查询,以便我当前登录。

示例:

$ psql my_db
psql(9.1.1)
my_db=> ALTER DATABASE my_db SET some_variable = '0';
                       ^^^^^

有没有办法避免在此查询中指定数据库名称?

3 个答案:

答案 0 :(得分:17)

目前无法测试,但由于您使用的是9.1,您可以尝试:

DO $$
BEGIN
   execute 'alter database '||current_database()||' set some_var = ''0''';
END;
$$

也许您需要在变量中选择current_database()才能使其正常工作。

答案 1 :(得分:8)

如果您在psql中执行脚本,则可以使用psql的替换机制:

alter database :DBNAME SET ...

文档在这里:http://www.postgresql.org/docs/current/interactive/app-psql.html#APP-PSQL-VARIABLES

答案 2 :(得分:1)

将几件事结合在一起,包括以前的答案和http://marxsoftware.blogspot.com/2015/08/postgresql-psql-variable-from-query.html中提到的“ \ gset”技术,最简化的方式是:

-- note no semicolon after \gset:
select current_database() \gset
alter database :current_database set some_var = '0';