Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

PostgreSQL

The World’s Most Advanced Open Source Relational Database

command

常用语法

# 切换/连接数据库
create database jeelowcode;

# 列出所有数据库
\l

# 切换/连接数据库
\c jeelowcode

# 删除数据库
drop database jeelowcode;

# 查看所有表
\dt

# 查看表结构
\d users

# 删除表
DROP TABLE users;

CREATE USER username WITH PASSWORD 'mypassword';	创建新用户
GRANT ALL PRIVILEGES ON DATABASE mydb TO username;	授予用户数据库权限
GRANT SELECT, INSERT ON TABLE users TO username;	授予用户表操作权限

pg_ctl

pg_ctl --help

pg_ctl 是一个用于初始化、启动、停止或控制PostgreSQL服务器的工具.

使用方法:
  pg_ctl init[db]   [-D 数据目录] [-s] [-o 选项]
  pg_ctl start      [-D 数据目录] [-l 文件名] [-W] [-t 秒数] [-s]
                    [-o 选项] [-p 路径] [-c]
  pg_ctl stop       [-D 数据目录] [-m SHUTDOWN-MODE] [-W] [-t 秒数] [-s]
  pg_ctl restart    [-D 数据目录] [-m SHUTDOWN-MODE] [-W] [-t 秒数] [-s]
                    [-o 选项] [-c]
  pg_ctl reload     [-D 数据目录] [-s]
  pg_ctl status     [-D 数据目录]
  pg_ctl promote    [-D 数据目录] [-W] [-t 秒数] [-s]
  pg_ctl logrotate  [-D 数据目录] [-s]
  pg_ctl kill       信号名称 进程号
  pg_ctl register   [-D 数据目录] [-N 服务名称] [-U 用户名] [-P 口令]
                    [-S 启动类型] [-e 源] [-W] [-t 秒数] [-s] [-o 选项]
  pg_ctl unregister [-N 服务名称]

普通选项:
  -D, --pgdata=数据目录  数据库存储区域的位置
  -e SOURCE              当作为一个服务运行时要记录的事件的来源
  -s, --silent           只打印错误信息, 没有其他信息
  -t, --timeout=SECS     当使用-w 选项时需要等待的秒数
  -V, --version          输出版本信息, 然后退出
  -w, --wait             等待直到操作完成(默认)
  -W, --no-wait          不用等待操作完成
  -?, --help             显示此帮助, 然后退出
如果省略了 -D 选项, 将使用 PGDATA 环境变量.

启动或重启的选项:
  -c, --core-files       在这种平台上不可用
  -l, --log=FILENAME     写入 (或追加) 服务器日志到文件FILENAME
  -o, --options=OPTIONS  传递给postgres的命令行选项
                         (PostgreSQL 服务器执行文件)或initdb
  -p PATH-TO-POSTMASTER  正常情况不必要

停止或重启的选项:
  -m, --mode=MODE        可以是 "smart", "fast", 或者 "immediate"

关闭模式有如下几种:
  smart       所有客户端断开连接后退出
  fast        直接退出, 正确的关闭(默认)
  immediate   不完全的关闭退出; 重启后恢复

允许关闭的信号名称:
  ABRT HUP INT KILL QUIT TERM USR1 USR2

注册或注销的选项:
  -N 服务名称     注册到 PostgreSQL 服务器的服务名称
  -P 口令         注册到 PostgreSQL 服务器帐户的口令
  -U 用户名       注册到 PostgreSQL 服务器帐户的用户名
  -S START-TYPE   注册到PostgreSQL服务器的服务启动类型

启动类型有:
  auto       在系统启动时自动启动服务(默认选项)
  demand     按需启动服务

psql

psql
命令	功能
\?	查看所有psql命令帮助
\h	查看SQL命令帮助(如 \h CREATE TABLE)
\l	列出所有数据库
\c dbname	连接到另一个数据库
\dt	列出当前数据库的所有表
\d tablename	查看指定表的结构
\x	切换扩展显示模式(查看宽表时有用)
\q	退出psql

PS C:\Users\PC> psql --help
psql是PostgreSQL 的交互式客户端工具。
使用方法:
  psql [选项]... [数据库名称 [用户名称]]
通用选项:
  -c, --command=命令       执行单一命令(SQL或内部指令)然后结束
  -d, --dbname=DBNAME      database name to connect to
  -f, --file=文件名        从文件中执行命令然后退出
  -l, --list               列出所有可用的数据库,然后退出
  -v, --set=, --variable=NAME=VALUE
                           设置psql变量NAME为VALUE
                           (例如,-v ON_ERROR_STOP=1)
  -V, --version            输出版本信息, 然后退出
  -X, --no-psqlrc          不读取启动文档(~/.psqlrc)
  -1 ("one"), --single-transaction
                           作为一个单一事务来执行命令文件(如果是非交互型的)
  -?, --help[=options]     显示此帮助,然后退出
      --help=commands      列出反斜线命令,然后退出
      --help=variables     列出特殊变量,然后退出

输入和输出选项:
  -a, --echo-all           显示所有来自于脚本的输入
  -b, --echo-errors        回显失败的命令
  -e, --echo-queries       显示发送给服务器的命令
  -E, --echo-hidden        显示内部命令产生的查询
  -L, --log-file=文件名    将会话日志写入文件
  -n, --no-readline        禁用增强命令行编辑功能(readline)
  -o, --output=FILENAME    将查询结果写入文件(或 |管道)
  -q, --quiet              以沉默模式运行(不显示消息,只有查询结果)
  -s, --single-step        单步模式 (确认每个查询)
  -S, --single-line        单行模式 (一行就是一条 SQL 命令)

输出格式选项 :
  -A, --no-align           使用非对齐表格输出模式
      --csv                CSV(逗号分隔值)表输出模式
  -F, --field-separator=STRING
                           为字段设置分隔符,用于不整齐的输出(默认:"|")
  -H, --html               HTML 表格输出模式
  -P, --pset=变量[=参数]   设置将变量打印到参数的选项(查阅 \pset 命令)
  -R, --record-separator=STRING
                           为不整齐的输出设置字录的分隔符(默认:换行符号)
  -t, --tuples-only        只打印记录i
  -T, --table-attr=文本    设定 HTML 表格标记属性(例如,宽度,边界)
  -x, --expanded           打开扩展表格输出
  -z, --field-separator-zero
                           为不整齐的输出设置字段分隔符为字节0
  -0, --record-separator-zero
                           为不整齐的输出设置记录分隔符为字节0

联接选项:
  -h, --host=HOSTNAME      database server host or socket directory
  -p, --port=PORT          database server port
  -U, --username=USERNAME  database user name
  -w, --no-password        永远不提示输入口令
  -W, --password           强制口令提示 (自动)

Win11 Installing

未配置环境变量

# 初始化 pgsql 数据库
# -D 数据目录 -A 密码认证方式 -U 超级管理员 -W 强制要求设置密码
.\initdb.exe -D D:\pgsql_data -A scram-sha-256 -U postgres -W

# 启动 pgsql
# -D 数据目录 -l 指定日志文件
.\pg_ctl.exe -D D:\pgsql_data -l pgsql.log  start

# 关闭 pgsql
# -D 数据目录 -l 指定日志文件
.\pg_ctl.exe -D D:\pgsql_data -l pgsql.log  stop

# 重启 pgsql
# -D 数据目录 -l 指定日志文件
.\pg_ctl.exe -D D:\pgsql_data -l pgsql.log  restart

# 到此时 仅能本地连接
.\psql.exe -h localhost -U postgres

# 配置文件 D:\pgsql_data\pg_hba.conf
# 测试环境 在配置文件末尾 添加一行规则,允许所有远程IP连接
host    all             all             0.0.0.0/0               scram-sha-256
# 生产环境 在配置文件末尾 添加一行规则,仅允许指定网段IP连接
host    all             all             192.168.1.0/24          scram-sha-256

配置环境变量 Path

C:\Program Files\pgsql\bin
C:\Program Files\pgsql\pgAdmin 4\runtime

注册服务

# 将 pgsql 注册为 win11 服务
pg_ctl register -N "PostgreSQL" -D D:\pgsql_data -S demand  -w

# 查看服务状态
Get-Service PostgreSQL
# 启动服务
Start-Service PostgreSQL
# 停止服务
Stop-Service PostgreSQL
# 重启服务
Restart-Service PostgreSQL
# 删除服务
sc.exe delete PostgreSQL