在ubuntu系统上安装postgresql数据库
【代码】在ubuntu系统上安装postgresql数据库。
安装postgresql数据库
sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt -y install postgresql
说明:安装会自动创建postgres账号,默认没有口令。
设置postgresql的环境变量
在 postgres 用户的 .bashrc 文件中设置 PostgreSQL 相关的环境变量是非常有用的,特别是当你经常需要以 postgres 用户身份执行 PostgreSQL 相关的命令时。以下是通常需要设置的一些变量:
-
PGDATA:
PGDATA变量指向 PostgreSQL 数据目录。这是 PostgreSQL 数据库实例的核心存储位置。通常,这个目录是/var/lib/postgresql/<version>/main,其中<version>是 PostgreSQL 的版本号。
-
PATH:
- 将 PostgreSQL 的二进制文件所在目录添加到
PATH变量中,以便于在终端中直接调用pg_ctl、psql等命令。
- 将 PostgreSQL 的二进制文件所在目录添加到
-
PGHOST:
- 如果你需要连接到远程 PostgreSQL 服务器,可以设置
PGHOST变量来指定服务器地址。
- 如果你需要连接到远程 PostgreSQL 服务器,可以设置
-
PGPORT:
- 设置 PostgreSQL 服务监听的端口号。默认端口号通常是 5432,但可以根据需要更改。
-
PGUSER:
- 设置默认的 PostgreSQL 用户名。虽然默认情况下,
psql等工具会使用当前登录用户作为默认用户,但在某些情况下,显式设置PGUSER可能是有用的。
- 设置默认的 PostgreSQL 用户名。虽然默认情况下,
-
PGPASSWORD:
- 设置 PostgreSQL 用户的密码。通常不建议在
.bashrc文件中明文存储密码,而是使用其他方法来安全地管理密码。
- 设置 PostgreSQL 用户的密码。通常不建议在
-
PGOPTIONS:
- 可以设置一些 PostgreSQL 连接选项,例如
PGOPTIONS='-c config_option=value'。
- 可以设置一些 PostgreSQL 连接选项,例如
示例
假设 PostgreSQL 的版本是 16,你可以按照以下步骤在 postgres 用户的 .bashrc 文件中设置这些变量:
-
进入一个新的 Bash shell 作为 postgres 用户
sudo -i -u postgres -
编辑 .bashrc 文件
vi ~/.bashrc
-
设置变量:
在文件末尾添加以下行:# PostgreSQL environment variables export PGDATA=/var/lib/postgresql/16/main export PATH=$PATH:/usr/lib/postgresql/16/bin # Uncomment the following lines if needed # export PGHOST=localhost # export PGPORT=5432 # export PGUSER=postgres # export PGPASSWORD=your_password # export PGOPTIONS='-c config_option=value' -
使更改生效:
为了使更改立即生效,需要重新加载.bashrc文件:sudo -i -u postgres source ~/.bashrc
注意事项
-
安全性:
- 不要在
.bashrc文件中明文存储密码。可以使用环境变量或其他更安全的方法来传递密码。 - 确保
.bashrc文件的权限设置正确,避免非授权用户访问敏感信息。
- 不要在
-
版本兼容性:
- 如果你有多个 PostgreSQL 版本安装在同一台机器上,确保
PGDATA和PATH变量指向正确的版本。
- 如果你有多个 PostgreSQL 版本安装在同一台机器上,确保
-
测试:
- 设置完变量后,可以测试一下是否能够正常运行 PostgreSQL 命令,例如
psql或pg_ctl。
- 设置完变量后,可以测试一下是否能够正常运行 PostgreSQL 命令,例如
完成这些步骤后,你就可以更方便地以 postgres 用户的身份管理 PostgreSQL 服务了。
如何以postgres用户的身份运行postgresql的数据库管理命令
sudo -i -u postgres
需要先检查~/.bashrc 文件的内容,把/usr/lib/postgres替换为/usr/lib/postgresql,然后手动运行下面命令加载环境变量
source ~/.bashrc
当你使用 sudo -i -u postgres 命令时,你会进入一个新的 Bash shell 实例,并且以 postgres 用户的身份运行。这使得你可以在一个临时的 shell 环境中执行一系列命令,而无需每次都使用 sudo。
示例
假设你想要以 postgres 用户的身份执行一系列 PostgreSQL 相关的命令,可以按照以下步骤操作:
-
进入一个新的 Bash shell 作为
postgres用户:sudo -i -u postgres -
加载
.bashrc文件:source ~/.bashrc -
执行 PostgreSQL 相关的命令:
-
启动 PostgreSQL 服务:
pg_ctl -D /var/lib/postgresql/16/main -l /var/log/postgresql/postgresql-16-main.log start -
停止 PostgreSQL 服务:
pg_ctl -D /var/lib/postgresql/16/main stop -
重启 PostgreSQL 服务:
pg_ctl -D /var/lib/postgresql/16/main -l /var/log/postgresql/postgresql-16-main.log restart -
检查 PostgreSQL 服务状态:
pg_ctl -D /var/lib/postgresql/16/main status
-
-
退出新的 shell:
exit
注意
- 使用
sudo -i -u postgres会使你进入一个新的 Bash shell 实例,所以如果你使用sudo -i -u postgres -c "source ~/.bashrc; pg_ctl ...",命令会在新的 shell 中执行,并且在执行完所有命令后退出该 shell。 - 如果你使用
sudo -i -u postgres,然后手动运行source ~/.bashrc和其他命令,你将保持在一个新的 shell 中。
完成这些步骤后,你将以 postgres 用户的身份加载了 .bashrc 文件,并且可以使用 pg_ctl 命令来管理 PostgreSQL 数据库。
systemctl和pg_ctl` 在运行 PostgreSQL 服务时的行为有何不同?
systemctl
当使用 systemctl 启动 PostgreSQL 服务时,服务通常在后台运行。这意味着启动服务后,命令会立即返回,你可以在同一终端窗口中继续执行其他命令,而 PostgreSQL 服务会在后台持续运行。
pg_ctl
当使用 pg_ctl 启动 PostgreSQL 服务时,默认情况下它会在前台运行。这意味着 PostgreSQL 服务会占用当前终端窗口,并且直到服务停止之前,你无法在同一个终端窗口中执行其他命令。
示例
使用 systemctl
启动 PostgreSQL 服务:
sudo systemctl start postgresql
停止 PostgreSQL 服务:
sudo systemctl stop postgresql
查看 PostgreSQL 服务状态:
sudo systemctl status postgresql
使用 pg_ctl
启动 PostgreSQL 服务(默认在前台运行):
pg_ctl -D /var/lib/postgresql/16/main -l /var/log/postgresql/postgresql-16-main.log start
如果你希望 pg_ctl 在后台运行,可以使用 -w 参数(等待模式):
pg_ctl -D /var/lib/postgresql/16/main -l /var/log/postgresql/postgresql-16-main.log start -w
停止 PostgreSQL 服务:
pg_ctl -D /var/lib/postgresql/16/main stop
查看 PostgreSQL 服务状态:
pg_ctl -D /var/lib/postgresql/16/main status
总结
- systemctl: 通常在后台运行,适合系统级的服务管理。
- pg_ctl: 默认在前台运行,但在使用
-w参数时也可以在后台运行。
注意事项
- 在使用
pg_ctl时,如果希望在启动 PostgreSQL 服务后能够继续在当前终端执行其他命令,可以使用-w参数。但是,通常情况下,使用systemctl来管理 PostgreSQL 服务更为方便,因为它会自动在后台运行。 - 如果你希望使用
pg_ctl在后台启动 PostgreSQL 服务,并且能够在启动完成后继续在当前终端窗口执行其他命令,可以考虑使用nohup命令或将其放入一个脚本中使用&符号在后台运行。
例如,使用 nohup 命令在后台启动 PostgreSQL 服务:
nohup pg_ctl -D /var/lib/postgresql/16/main -l /var/log/postgresql/postgresql-16-main.log start &
这样,即使你关闭了终端窗口,PostgreSQL 服务也会继续在后台运行。
为什么在执行sudo -u postgres vi /.bashrc的时候,被解释为当前用户目录,而不是postgres用户的home目录
在 sudo -u postgres vi ~/.bashrc 命令中,~ 符号会被解释为当前用户的家目录,而不是 postgres 用户的家目录。这是因为 vi 命令是在当前 shell 中执行的,而当前 shell 中的 ~ 符号是指向当前用户的家目录。
解决方案
要编辑 postgres 用户的 .bashrc 文件,您需要明确指定文件的完整路径,或者使用 sudo -i -u postgres 进入一个新的 shell 实例作为 postgres 用户,然后在该 shell 中编辑 .bashrc 文件。
方法 1: 明确指定文件路径
您可以使用 sudo 和完整的文件路径来编辑 postgres 用户的 .bashrc 文件:
sudo -u postgres vi /home/postgres/.bashrc
或者,如果您知道 postgres 用户的家目录位于 /var/lib/postgresql,则可以使用:
sudo -u postgres vi /var/lib/postgresql/.bashrc
方法 2: 使用 sudo -i -u postgres 进入一个新的 shell 实例
使用 sudo -i -u postgres 命令可以让你进入一个新的 Bash shell 实例,并且以 postgres 用户的身份运行。在这种情况下,~ 符号将指向 postgres 用户的家目录。
-
进入一个新的 Bash shell 作为
postgres用户:sudo -i -u postgres -
编辑
.bashrc文件:vi ~/.bashrc
注意
- 使用
sudo -i -u postgres会使你进入一个新的 Bash shell 实例。 - 在新的 shell 中,
~符号将指向postgres用户的家目录。
完成这些步骤后,您将以 postgres 用户的身份编辑 .bashrc 文件。如果您有任何疑问或需要进一步的帮助,请随时告诉我!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)