创建没有root权限的PostgreSQL数据库

JHu*_*JHu 5 database linux postgresql

目前,我用

$ sudo service postgresql start    
Run Code Online (Sandbox Code Playgroud)

启动PostgreSQL服务器和

$ sudo -u postgres createdb testdb --owner ownername
Run Code Online (Sandbox Code Playgroud)

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

Cra*_*ger 9

你可以通过创建一个新实例(PostgreSQL称之为"集群")并启动它来运行没有root权限的PostgreSQL.

pg_ctlcluster如果这样做,您不能使用Ubuntu init脚本,诸如此类的包装工具.您必须只使用PostgreSQL自己的工具.

要创建新的PostgreSQL实例,超级用户等于您的用户名,主目录中的数据目录,默认情况下启用md5 auth,请使用:

initdb -D $HOME/my_postgres -A md5 -U $USER
Run Code Online (Sandbox Code Playgroud)

根据需要调整; 看initdb --help.

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

开始吧:

pg_ctl -D $HOME/my_postgres -w start
Run Code Online (Sandbox Code Playgroud)

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

psql -p 5434 ...
Run Code Online (Sandbox Code Playgroud)

(如果你改变了,unix_socket_directories你也想指定你给出的路径,比如-h /home/myuser/postgres_socket.)

psql默认情况下使用etc连接到你的postgres,编辑你的~/.bashrc东西就像添加

export PGPORT=5434
Run Code Online (Sandbox Code Playgroud)

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

要阻止它:

pg_ctl -D $HOME/my_postgres -w stop
Run Code Online (Sandbox Code Playgroud)

但是你也可以在不停止的情况下关闭它,它并不关心,并且当你下次启动时它会安全恢复.

要在登录时在主目录中设置时自动启动它,您必须使用桌面环境的run-at-startup功能.它们因环境和版本而异,所以我不能在此提供详细信息; 它与GNOME 3,Unity(ubuntu),KDE,XFCE等不同.

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