目前,我使用
$ sudo service postgresql start
启动PostgreSQL服务器和
$ sudo -u postgres createdb testdb --owner ownername
创建数据库。但是,这些命令需要root权限。如何在Linux(Ubuntu)上没有root权限/ sudo的情况下执行这些操作?
答案 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