写在前头
本笔记前两篇主要列出PgSQL的常用命令和数据类型。具体的实操命令从第三篇开始讲解。
Windows上安装PostgreSQL
使用EnterpriseDB来下载安装,根据安装指引安装即可。下载地址:Download PostgreSQL (enterprisedb.com)
PostgreSQL语法
默认情况下PostgreSQL安装完成后,自带了个命令行工具SQL Shell(psql)。
进入命令行工具,可以使用\help 命令
来查看各个命令的语法。
若要查看具体命令的用法,可到PostgreSQL的API文档中查看。PostgreSQL 14.3 中文 (runebook.dev)
PostgreSQL语句
常用语句
在表和文件之间拷贝数据:copy
具体语句用法如下:
1 | -- 使用竖线(|)作为域定界符把一个表复制到客户端 |
定义访问权限:grant
具体语句用法如下:
1 | -- 把表films上的插入特权授予给所有用户 |
从一个查询的结果中定义一个新表:select into
具体语句用法如下:
1 | -- 创建一个只由来自films的最近项构成的 新表films_recent |
清空一个或一组表:truncate
具体语句用法如下:
1 | -- 清除 COMPANY 表 |
修改运行时参数:set
具体语句用法如下:
1 | exec sql set descriptor indesc count = 1; |
把一个运行时参数值恢复为默认值:reset
具体语句用法如下:
1 | -- 把timezone配置变量设置为默认值 |
显示运行时的参数值:show
具体语句用法如下:
1 | -- 显示参数DateStyle的当前设置 |
更新一个表中的行:update
具体语句用法如下:
1 | -- 把表films的列kind 中的单词Drama改成Dramatic |
创建一个准备好的查询:prepare
具体语句用法如下:
1 | -- 提交由事务标识符foobar标识的事务 |
执行一个准备好的查询:execute
具体语句用法如下:
1 | execute query(100, 200); |
显示一个语句的执行规则:explain
具体语句用法如下:
1 | -- 有一个具有单个integer列和 10000 行的表,要显示在其上的一个简单查询的计划 |
在表中创建新行:insert
具体语句用法如下:
1 | -- 向films中插入一行 |
重建索引:reindex
具体语句用法如下:
1 | -- 重建单个索引 |
收集与数据库有关的统计:analyze
具体语句用法如下:
1 | analyze; |
生成一个通知:notify
具体语句用法如下:
1 | -- 从psql配置和执行一个监听/通知序列 |
监听一个通知:listen
具体语句用法如下:
1 | -- 从psql中配置并执行一个监听/通知序列 |
停止监听通知信息:unlisten
具体语句用法如下:
1 | -- 做一次注册 |
锁定一个表:lock
具体语句用法如下:
1 | -- 将数据库中的 COMPANY 表锁定为 ACCESS EXCLUSIVE 模式 |
根据一个索引聚簇一个表:cluster
具体语句用法如下:
1 | -- 基于索引employees_ind聚簇表 employees |
定义或者改变一个对象的注释:comment
具体语句用法如下:
1 | -- 为表mytable附加一段注释 |
垃圾收集以及可选地分析一个数据库:vacuum
具体语句用法如下:
1 | -- 清理单一表onek,为优化器分析它并且打印出详细的清理活动报告 |
为当前会话设置会话用户标识符和当前用户标识符:set session authorization
具体语句用法如下:
1 | set session authorization 'paul'; |
删除访问权限:revoke
具体语句用法如下:
1 | -- 从 public 收回表films上的插入特权 |
事务相关命令
开始一个事务:begin
具体语句用法如下:
1 | begin; |
提交当前事务:commit
具体语句用法如下:
1 | -- 要提交当前事务并且让所有更改持久化 |
提交当前事务:end
具体语句用法如下:
1 | -- 提交当前事务并且让所有更改持久化 |
强制一个事务日志检查点:checkpoint
具体语句用法如下:
1 | checkpoint; |
中止当前事务:rollback
回滚当前事务并且导致该事务所作的所有更新都被抛弃。具体语句用法如下:
1 | -- 中止所有更改 |
中止当前事务:abort
回滚当前事务并且导致由该事务所作的所有更新被丢弃。具体语句用法如下:
1 | abort; |
开始一个事务块:set transaction
具体语句用法如下:
1 | -- 要用一个已经存在的事务的同一快照开始一个新事务,首先要从该现有 事务导出快照。这将会返回快照标识符 |
开始一个事务块:start transaction
具体语句用法如下:
1 | -- 中止所有更改 |
在当前事务里定义一个新的保存点:savepoint
具体语句用法如下:
1 | -- 建立一个保存点并且后来撤销在它建立之后执行的所有命令的效果 |
回滚到一个保存点:rollback to savepoint
具体语句用法如下:
1 | -- 撤销在my_savepoint建立后执行的命令的效果 |
删除一个前面定义的保存点:release savepoint
具体语句用法如下:
1 | -- 建立并且销毁一个保存点 |
游标相关命令
定义一个游标:declare
具体语句用法如下:
1 | -- 声明一个游标 |
定位一个游标:move
具体语句用法如下:
1 | BEGIN WORK; |
用游标从查询中抓取行:fetch
具体语句用法如下:
1 | -- 在游标 liahona 中取出前 5 行: |
关闭游标:close
具体语句用法如下:
1 | -- 关闭游标liahona |
alter修改命令
修改一个聚集函数的定义:alter aggregate
具体语句用法如下:
1 | alter aggregate myavg(integer) rename to my_average; |
修改一个排序规则定义:alter collation
具体语句用法如下:
1 | -- 把排序规则de_DE重命名为german |
修改一个编码转换的定义:alter conversion
具体语句用法如下:
1 | -- 把转换iso_8859_1_to_utf8的拥有者改成joe |
修改一个数据库:alter database
具体语句用法如下:
1 | -- 在数据库test中默认禁用索引扫描 |
定义默认的访问权限:alter default privileges
具体语句用法如下:
1 | -- 在模式myschema中创建的所有表(和视图)授予 SELECT 特权,并且也允许角色webuser向它们之中 INSERT 数据 |
修改一个域的定义:alter domain
具体语句用法如下:
1 | -- 把一个NOT NULL约束加到一个域 |
修改一个函数的定义:alter function
具体语句用法如下:
1 | -- 把用于类型integer的函数sqrt 重命名为square_root |
修改角色名称或成员关系:alter group
具体语句用法如下:
1 | -- 向一个组增加用户 |
修改一个索引的定义:alter index
具体语句用法如下:
1 | -- 把一个索引移动到一个不同的表空间 |
修改一个操作符的定义:alter operator
具体语句用法如下:
1 | -- 更改类型text的一个自定义操作符a @@ b 的拥有者 |
修改一个模式的定义:alter schema
具体语句用法如下:
1 | -- 把一个索引移动到一个不同的表空间 |
修改一个数据库角色:alter role
具体语句用法如下:
1 | -- 更改一个角色 |
修改一个序列生成器的定义:alter sequence
具体语句用法如下:
1 | -- 在 105 重启一个被称为serial的序列 |
修改表的定义:alter table
具体语句用法如下:
1 | -- 向一个表增加一个类型为varchar的列 |
修改一个表空间:alter tablespace
具体语句用法如下:
1 | -- 将表空间index_space重命名为fast_raid |
修改一个事件触发器的定义:alter event trigger
具体语句用法如下:
1 | -- 重命名一个现有的触发器 |
修改一个类型的定义:alter type
具体语句用法如下:
1 | -- 重命名一个数据类型 |
create定义命令
定义一个新的约束触发器:constraint trigger
具体语句用法如下:
1 | -- 只要表accounts的一行即将要被更新时会执行函数check_account_update |
定义一个新的编码转换:create conversion
具体语句用法如下:
1 | -- 使用myfunc创建一个从编码UTF8到 LATIN1的转换 |
创建一个新数据库:create database
具体语句用法如下:
1 | -- 创建一个新数据库 |
定义一个新域:create domain
具体语句用法如下:
1 | -- 创建us_postal_code数据类型并且把它用在 一个表定义中。一个正则表达式测试被用来验证值是否看起来像一个 合法的 US 邮政编码 |
定义一个新函数:create function
具体语句用法如下:
1 | create function add(integer, integer) returns integer |
定义一个新索引:create index
具体语句用法如下:
1 | -- 在表films中的列title上创建一个 B-树索引 |
定义一种新的过程语言:create language
具体语句用法如下:
1 | -- 创建新的过程语言的最小顺序 |
定义一个新的操作符:create operator
具体语句用法如下:
1 | -- 为数据类型box定义一种新的操作符--面积相等 |
定义一个新的操作符表:create operator class
具体语句用法如下:
1 | -- 为数据类型_int4(int4数组) 定义了一个 GiST 索引操作符 |
定义一个新的数据库角色:create role
具体语句用法如下:
1 | -- 创建一个有口令的角色 |
定义一个新重写规则:create rule
具体语句用法如下:
1 | create rule notify_me as on update to mytable do also notify mytable; |
定义一个新模式:create schema
具体语句用法如下:
1 | -- 创建一个模式 |
定义一个新的外部服务器:create server
具体语句用法如下:
1 | -- 创建使用外部数据包装器postgres_fdw 的服务器myserver |
定义一个新序列发生器:create sequence
具体语句用法如下:
1 | -- 创建一个称作serial的上升序列,从 101 开始 |
定义一个新表:create table
具体语句用法如下:
1 | -- 创建表distributors |
从一条查询的结果中创建一个新表:create table as
具体语句用法如下:
1 | -- 创建一个新表films_recent,它只由表 films中最近的项组成 |
定义一个新的表空间:create tablespace
具体语句用法如下:
1 | -- 要在文件系统位置/data/dbs创建表空间dbspace,请首先使用操作系统工具创建目录并设置正确的所有权 |
定义一个新的触发器:create trigger
具体语句用法如下:
1 | -- 禁止执行任何DDL命令 |
定义一个新的数据类型:create type
具体语句用法如下:
1 | -- 创建一个枚举类型并且将其用在一个表定义中 |
定义一个视图:create view
具体语句用法如下:
1 | -- 创建一个由所有喜剧电影组成的视图 |
drop删除命令
删除一个表中的行:delete
具体语句用法如下:
1 | -- 删除所有电影,但音乐剧除外 |
删除一个用户定义的聚类函数:drop aggregate
具体语句用法如下:
1 | -- 为类型integer移除聚集函数myavg |
删除一个用户定义的类型转换:drop cast
具体语句用法如下:
1 | -- 移除从类型text到类型int的类型 |
删除一个用户定义的编码转换:drop conversion
具体语句用法如下:
1 | -- 删除名为myname的转换 |
删除一个数据库:drop database
具体语句用法如下:
1 | -- 删除名为myname的数据库 |
删除一个用户定义的域:drop domain
具体语句用法如下:
1 | -- 移除域box |
删除一个函数:drop function
具体语句用法如下:
1 | -- 移除域box |
删除一个索引:drop index
具体语句用法如下:
1 | -- 移除索引title_idx |
删除一个过程语言:drop language
具体语句用法如下:
1 | -- 移除过程语言plsample |
删除一个操作符:drop operator
具体语句用法如下:
1 | -- 为类型integer移除幂操作符 a^b |
删除一个操作符表:drop operator class
具体语句用法如下:
1 | -- 移除 B-树操作符类widget_ops |
删除一个数据库角色:drop role
具体语句用法如下:
1 | -- 删除一个角色 |
删除一个重写规则:drop rule
具体语句用法如下:
1 | -- 删除重写规则newrule |
删除一个模式:drop schema
具体语句用法如下:
1 | -- 移除序列serial |
删除一个表:drop table
具体语句用法如下:
1 | -- 销毁两个表films和 distributors |
删除一个表空间:drop tablespace
具体语句用法如下:
1 | -- 从系统移除表空间mystuff |
删除一个触发器定义:drop trigger
具体语句用法如下:
1 | -- 销毁表films上的触发器 if_dist_exists |
删除一个用户定义数据类型:drop type
具体语句用法如下:
1 | -- 移除数据类型box |
删除一个视图:drop view
具体语句用法如下:
1 | -- 将移除名为kinds的视图 |