Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux*上运行PostgreSQL的“dropdb”命令,而不必向Postgres用户发出命令?_Linux_Postgresql - Fatal编程技术网

如何在Linux*上运行PostgreSQL的“dropdb”命令,而不必向Postgres用户发出命令?

如何在Linux*上运行PostgreSQL的“dropdb”命令,而不必向Postgres用户发出命令?,linux,postgresql,Linux,Postgresql,我希望能够运行dropdb mydb。但是,当我尝试作为我的普通用户使用时,我得到: dropdb:错误:数据库删除失败:错误:必须是数据库mydb的所有者 现在我知道我可以做到: 但如果我试图编写删除和重新创建DB的脚本,那就很烦人了,因为我必须手动输入我的sudo密码 通过使用pg_hba.conf,我基本上可以避免不得不对postgres用户进行sudo操作,其中包括: 但出于某种原因,dropdb似乎不尊重我的pg_hba.conf。有什么方法可以让我作为我的普通用户运行dropdb吗

我希望能够运行dropdb mydb。但是,当我尝试作为我的普通用户使用时,我得到:

dropdb:错误:数据库删除失败:错误:必须是数据库mydb的所有者

现在我知道我可以做到:

但如果我试图编写删除和重新创建DB的脚本,那就很烦人了,因为我必须手动输入我的sudo密码

通过使用pg_hba.conf,我基本上可以避免不得不对postgres用户进行sudo操作,其中包括:

但出于某种原因,dropdb似乎不尊重我的pg_hba.conf。有什么方法可以让我作为我的普通用户运行dropdb吗


编辑:同样的问题也适用于createdb。我实际上可以改变数据库所有者,使其能够删除,谢谢stickybit。。。但之后我无法重新创建它。

除非您是数据库的所有者,请尝试向数据库所有者或超级用户传递-U选项

dropdb -U <the database owner> <the database name>
同样,它可以在psql或任何其他客户端中运行,但必须作为数据库超级用户运行,例如postgres

然后,您应该自动成为数据库的所有者,除非您另外指定,因此可以再次删除它

当然,您也可以类似地授予自己超级用户权限

ALTER USER <your user name> SUPERUSER; 

除非您是数据库的所有者,否则请尝试向数据库所有者或超级用户传递-U选项

dropdb -U <the database owner> <the database name>
同样,它可以在psql或任何其他客户端中运行,但必须作为数据库超级用户运行,例如postgres

然后,您应该自动成为数据库的所有者,除非您另外指定,因此可以再次删除它

当然,您也可以类似地授予自己超级用户权限

ALTER USER <your user name> SUPERUSER; 

你通过了-U postgres选项吗?并在更改pg_hba.conf后重新启动了服务?我确实在sudo/etc/init.d/postgrestart之后重新启动了postgres。至于-U,据我所知,它应该默认为我的用户,并且。。。不是我以为的数据库的所有者,但我刚刚意识到我错了。让我尝试更改所有权。好的,更改所有者让我删除数据库。。。但是现在我对createdb也有同样的问题。您可以从目录中获取所有者的名称:从pg_database dat中选择rol.rolname LEFT JOIN pg_authid rol ON rol.oid=dat.datdba,其中datname=;至于-U,据我所知,它应该默认为我的用户,并且。。。不完全是数据库的所有者。这就是为什么您需要使用-U postgres,因为如果没有它,它默认为您的用户,并且默认值没有权限。您是否通过了-U postgres选项?并在更改pg_hba.conf后重新启动了服务?我确实在sudo/etc/init.d/postgrestart之后重新启动了postgres。至于-U,据我所知,它应该默认为我的用户,并且。。。不是我以为的数据库的所有者,但我刚刚意识到我错了。让我尝试更改所有权。好的,更改所有者让我删除数据库。。。但是现在我对createdb也有同样的问题。您可以从目录中获取所有者的名称:从pg_database dat中选择rol.rolname LEFT JOIN pg_authid rol ON rol.oid=dat.datdba,其中datname=;至于-U,据我所知,它应该默认为我的用户,并且。。。不完全是数据库的所有者。这就是为什么您需要使用-U postgres,因为如果没有它,它将默认为您的用户,并且默认值没有权限。
ALTER USER <your user name> CREATEDB;
ALTER USER <your user name> SUPERUSER;