安装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 相关的命令时。以下是通常需要设置的一些变量:

  1. PGDATA:

    • PGDATA 变量指向 PostgreSQL 数据目录。这是 PostgreSQL 数据库实例的核心存储位置。通常,这个目录是 /var/lib/postgresql/<version>/main,其中 <version> 是 PostgreSQL 的版本号。
  2. PATH:

    • 将 PostgreSQL 的二进制文件所在目录添加到 PATH 变量中,以便于在终端中直接调用 pg_ctlpsql 等命令。
  3. PGHOST:

    • 如果你需要连接到远程 PostgreSQL 服务器,可以设置 PGHOST 变量来指定服务器地址。
  4. PGPORT:

    • 设置 PostgreSQL 服务监听的端口号。默认端口号通常是 5432,但可以根据需要更改。
  5. PGUSER:

    • 设置默认的 PostgreSQL 用户名。虽然默认情况下,psql 等工具会使用当前登录用户作为默认用户,但在某些情况下,显式设置 PGUSER 可能是有用的。
  6. PGPASSWORD:

    • 设置 PostgreSQL 用户的密码。通常不建议在 .bashrc 文件中明文存储密码,而是使用其他方法来安全地管理密码。
  7. PGOPTIONS:

    • 可以设置一些 PostgreSQL 连接选项,例如 PGOPTIONS='-c config_option=value'

示例

假设 PostgreSQL 的版本是 16,你可以按照以下步骤在 postgres 用户的 .bashrc 文件中设置这些变量:

  1. 进入一个新的 Bash shell 作为 postgres 用户

    sudo -i -u postgres
    
  2. 编辑 .bashrc 文件

vi ~/.bashrc
  1. 设置变量:
    在文件末尾添加以下行:

    # 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'
    
  2. 使更改生效:
    为了使更改立即生效,需要重新加载 .bashrc 文件:

    sudo -i -u postgres 
    source ~/.bashrc
    

注意事项

  • 安全性:

    • 不要在 .bashrc 文件中明文存储密码。可以使用环境变量或其他更安全的方法来传递密码。
    • 确保 .bashrc 文件的权限设置正确,避免非授权用户访问敏感信息。
  • 版本兼容性:

    • 如果你有多个 PostgreSQL 版本安装在同一台机器上,确保 PGDATAPATH 变量指向正确的版本。
  • 测试:

    • 设置完变量后,可以测试一下是否能够正常运行 PostgreSQL 命令,例如 psqlpg_ctl

完成这些步骤后,你就可以更方便地以 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 相关的命令,可以按照以下步骤操作:

  1. 进入一个新的 Bash shell 作为 postgres 用户:

    sudo -i -u postgres
    
  2. 加载 .bashrc 文件:

    source ~/.bashrc
    
  3. 执行 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
      
  4. 退出新的 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 数据库。

systemctlpg_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 用户的家目录。

  1. 进入一个新的 Bash shell 作为 postgres 用户:

    sudo -i -u postgres
    
  2. 编辑 .bashrc 文件:

    vi ~/.bashrc
    

注意

  • 使用 sudo -i -u postgres 会使你进入一个新的 Bash shell 实例。
  • 在新的 shell 中,~ 符号将指向 postgres 用户的家目录。

完成这些步骤后,您将以 postgres 用户的身份编辑 .bashrc 文件。如果您有任何疑问或需要进一步的帮助,请随时告诉我!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐