不使用root权限创建PostgreSQL数据库

7

目前,我使用

$ sudo service postgresql start    

启动PostgreSQL服务器并

$ sudo -u postgres createdb testdb --owner ownername

如何在Linux(Ubuntu)上没有root权限/ sudo的情况下创建数据库?这些命令需要root权限。


如果您想将事物作为系统服务运行,您需要 root 权限。但是,您可以在自己的用户帐户下很好地本地运行 Postgresql。而且 createdb 也不需要 root 权限(只需要作为 Postgres 管理员用户访问 Postgres 的权限,这可以由任何操作系统用户甚至远程用户完成)。 - Thilo
@Thilo 你能解释一下如何在本地运行Postgresql吗? - cstjh
2个回答

13

您可以通过创建一个新的实例(PostgreSQL称之为“集群”)并启动它来不使用root权限运行PostgreSQL。

如果这样做,您将无法使用Ubuntu的初始化脚本、像pg_ctlcluster这样的包装工具等。 您必须仅使用PostgreSQL自己的工具。

要创建新的PostgreSQL实例,并使超级用户等于您的用户名,数据目录位于您的主目录中,并默认启用md5身份验证,请使用以下命令:

initdb -D $HOME/my_postgres -A md5 -U $USER

根据需要进行调整;请参考 initdb --help

然后,您需要编辑 postgresql.confport 更改为非默认端口,因为您的系统可能在默认端口 5432 上运行自己的 postgres。 (如果您想严格限制访问权限,则可以设置 listen_addresses = ''unix_socket_directories = /home/myuser/postgres_socket 或其他位置。但是,使用不同的端口更简单。)

启动它:

pg_ctl -D $HOME/my_postgres -w start

要连接它,请指定您选择的端口:

psql -p 5434 ...

(如果您更改了unix_socket_directories,您还需要指定所提供的路径,例如-h /home/myuser/postgres_socket。)

如果要使psql等默认连接到您的postgres,请编辑~/.bashrc并添加类似以下内容的内容:

export PGPORT=5434

但请注意,这也会影响到连接其他主机的默认端口。

要停止它:

pg_ctl -D $HOME/my_postgres -w stop

但是您也可以在不停止它的情况下直接关闭它,它并不关心,并且在下次启动它时可以安全地恢复。

如果要在登录时自动启动它,并将其设置在您的主目录中,则必须使用桌面环境的“运行启动”功能。这取决于环境和版本,因此我无法在此提供详细信息;对于GNOME 3、Unity(Ubuntu)、KDE、XFCE等桌面环境,具体操作略有不同。

请注意,此方法仍然使用系统中的PostgreSQL软件包。这很重要,因为如果您卸载(例如)PostgreSQL 9.4并安装9.6,则您在主目录中的副本将停止工作。如果您想完全独立于系统软件包,那么您应该从源代码编译PostgreSQL或使用二进制安装程序在您的主目录中安装。


端口配置的替代方法:将 /var/run/postgresql 的所有权更改为您自己:sudo chown -R jordan:jordan /var/run/postgresql 然而,仅当您不打算在系统上以该用户身份运行 postgres 时才执行此操作,否则它将无法在端口 5432 上运行。 - Jordan Kasper

1

2023免责声明:二进制文件仅适用于10.23版本。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接