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

时间:2016-11-16 23:50:52

标签: linux database postgresql

目前,我使用

$ sudo service postgresql start    

启动PostgreSQL服务器和

$ sudo -u postgres createdb testdb --owner ownername

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

2 个答案:

答案 0 :(得分:9)

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

如果您这样做,则无法使用Ubuntu init脚本,pg_ctlcluster等包装工具。您必须只使用PostgreSQL自己的工具。

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

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

根据需要调整;见initdb --help

然后,您需要编辑postgresql.conf以将port更改为非默认值,因为您的系统可能在默认端口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

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

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

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

答案 1 :(得分:0)

Postgres可以在没有root许可的情况下运行。 只需从下载 https://www.enterprisedb.com/download-postgresql-binaries

然后运行

初始化数据库

./initdb -D /data

运行postgres

./bin/postgres -D /data

创建数据库

./bin/createdb mydb

与psql连接

./bin/psql mydb

https://www.golery.com/pencil/vU