目前,我使用
$ sudo service postgresql start
启动PostgreSQL服务器并
$ sudo -u postgres createdb testdb --owner ownername
如何在Linux(Ubuntu)上没有root权限/ sudo的情况下创建数据库?这些命令需要root权限。
目前,我使用
$ sudo service postgresql start
启动PostgreSQL服务器并
$ sudo -u postgres createdb testdb --owner ownername
如何在Linux(Ubuntu)上没有root权限/ sudo的情况下创建数据库?这些命令需要root权限。
您可以通过创建一个新的实例(PostgreSQL称之为“集群”)并启动它来不使用root权限运行PostgreSQL。
如果这样做,您将无法使用Ubuntu的初始化脚本、像pg_ctlcluster
这样的包装工具等。 您必须仅使用PostgreSQL自己的工具。
要创建新的PostgreSQL实例,并使超级用户等于您的用户名,数据目录位于您的主目录中,并默认启用md5身份验证,请使用以下命令:
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
但是您也可以在不停止它的情况下直接关闭它,它并不关心,并且在下次启动它时可以安全地恢复。
如果要在登录时自动启动它,并将其设置在您的主目录中,则必须使用桌面环境的“运行启动”功能。这取决于环境和版本,因此我无法在此提供详细信息;对于GNOME 3、Unity(Ubuntu)、KDE、XFCE等桌面环境,具体操作略有不同。
请注意,此方法仍然使用系统中的PostgreSQL软件包。这很重要,因为如果您卸载(例如)PostgreSQL 9.4并安装9.6,则您在主目录中的副本将停止工作。如果您想完全独立于系统软件包,那么您应该从源代码编译PostgreSQL或使用二进制安装程序在您的主目录中安装。
sudo chown -R jordan:jordan /var/run/postgresql
然而,仅当您不打算在系统上以该用户身份运行 postgres 时才执行此操作,否则它将无法在端口 5432 上运行。 - Jordan Kasper./initdb -D /data
运行Postgres:
./bin/postgres -D /data
创建数据库:
./bin/createdb mydb
使用psql连接:
./bin/psql mydb
createdb
也不需要 root 权限(只需要作为 Postgres 管理员用户访问 Postgres 的权限,这可以由任何操作系统用户甚至远程用户完成)。 - Thilo