Yuuki

Yuuki's Blog

Hacker. Code Enthusiast.
github
bilibili
twitter

PostgreSQL Cheatsheet

环境配置#

安装客户端及服务端工具#

详情参考 https://www.postgresql.org/download/ 链接中所指示的步骤

(仅) 安装客户端连接工具#

# Debian 操作系统
sudo apt update
sudo apt install postgresql-client

# MacOS 操作系统
brew install libpq

服务管理#

Linux 操作系统下使用 systemctl 进行服务管理,服务名称为 postgresql,可以使用的命令例如:

# 启动服务
systemctl status postgresql

# 重启服务
systemctl restart postgresql

# 重载配置文件
systemctl reload postgresql

# 停止服务
systemctl stop postgresql

用户管理#

-- 创建用户
CREATE USER <username> WITH PASSWORD '<password>';

-- 赋予权限 (单个数据库)
GRANT ALL PRIVILEGES ON DATABASE <database> TO <username>;

-- 赋予权限 (单个表)
ALTER TABLE <table_name> OWNER TO <username>;

-- 修改密码
ALTER USER <username> WITH PASSWORD <new_password>;

PostgreSQL 内置语句#

-- 列出服务器所有数据库
\l
\list

-- 使用特定的数据库
\c <db_name>
\connect <db_name>

-- 列出数据库中所有表
\dt

-- 列出数据库中所有表及视图
\d
\dtvmsE

-- 获取指定表的结构
\d <table_name>

-- 导入 SQL 文件
\i <filename>
\include <filename>

DDL (Data Definition Language)#

-- 创建数据库
CREATE DATABASE mydb;

-- 删除数据库
DROP DATABASE mydb;

psql (PostgreSQL interactive terminal)#

在命令行 执行 SQL 语句#

psql -h <host> -d <db_name> -U <username> -d <database> -c "<sql>"

在命令行免密执行 SQL 语句#

方式一:环境变量#

export PGPASSWORD='<password>'

配置完成后正常执行命令即可,例如:

方式二:.pgpass 配置文件#

在用户根目录 (例如 ~/) 创建 .pgpass 文件,文件内容如下所示 (替换尖括号内的内容为实际信息):

<host>:<port>:<db_name>:<username>:<password>

接下来需要设置 .pgpass 文件的权限,使只有用户自己可以读取和写入该文件:

chmod 600 "$HOME/.pgpass"

之后尝试免密执行命令:

psql -h <host> -d <db_name> -U <username> -c "<sql>"

此外,可以通过配置 PGPASSFILE 环境变量指定自定义路径的 .pgpass:

export PGPASSFILE="/path/to/.pgpass"

方式三: pg_service.conf 配置文件#

在用户主目录创建 .pg_service.conf 配置文件,并填入以下内容 (替换尖括号内的内容为实际信息):

[myservice]
host=<host>
port=<port>
dbname=<db_name>
user=<username>
password=<password>

之后配置 PGSERVICE 环境变量为配置文件中的指定名称:

export PGSERVICE="myservice"

最后尝试免密执行命令:

psql -c "<sql>"

注意,使用 .pg_service.conf 可以存储多个服务连接配置,切换不同的配置只需要将 PGSERVICE 环境变量修改特定的名称。

此外,可以通过配置 PGSERVICEFILE 环境变量指定自定义路径的 .pg_service.conf:

export PGPASSFILE="/path/to/.pg_service.conf"
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。