2016-11-16 315 views
0

目前,我用无需root权限创建PostgreSQL数据库

$ sudo service postgresql start  

启动PostgreSQL服务器和

$ sudo -u postgres createdb testdb --owner ownername 

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

+0

如果你想运行一个系统服务的东西,你需要root权限。但是你可以在你自己的用户帐户下本地运行Postgresql。 'createdb'不需要root用户(只需将Postgres作为Postgres管理员用户访问,可以由任何操作系统用户甚至远程用户完成) – Thilo

+0

@Thilo您能否解释如何在本地运行Postgresql? – JHu

回答

5

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

如果你这样做,你不能使用Ubuntu init脚本,包装工具如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,或者使用二进制安装程序安装在你的主目录中。