PostgreSQL7.0手册-用户手册-19. SQL命令索引
第十九章. SQL 命令
内容 
ABORT — 退出当前事务 
ALTER GROUP — 向组中增加新用户,从组中删除用户 
ALTER TABLE — 修改表属性 
ALTER USER — 修改用户帐户信息 
BEGIN — 以链模式开始一个事务 
CLOSE — 关闭一个游标 
CLUSTER — 给服务器存储簇建议 
COMMENT — 向一个对象增加评注 
COMMIT — 提交当前事务 
COPY — 在文件和表之间拷贝数据 
CREATE AGGREGATE — 定义一个新的聚集函数 
CREATE CONSTRAINT TRIGGER — 创建一个支持约束的触发器 
CREATE DATABASE — 创建一个新数据库 
CREATE FUNCTION — 定义一个新函数 
CREATE GROUP — 创建一个新组 
CREATE INDEX — 构造一个从索引 drop table if exists user
CREATE LANGUAGE — 为函数定义一门新语言 
CREATE OPERATOR — 定义一个新的用户操作符 
CREATE RULE — 定义一个新规则 
CREATE SEQUENCE — 创建一个新的序列数生成器 
CREATE TABLE — 创建一个新表 
CREATE TABLE AS — 创建一个新表 
CREATE TRIGGER — 创建一个新触发器 
CREATE TYPE — 定义一个新的基本数据类型 
CREATE USER — 创建一个新的数据库用户 
CREATE VIEW — 构造一个虚拟表 
DECLARE — 定义一个访问数据库的游标 
DELETE — 从表中删除行 
DROP AGGREGATE — 删除一个聚集函数的定义 
DROP DATABASE — 删除一个现有的表 
DROP FUNCTION — 删除一个用户定义的 C 函数 
DROP GROUP — 删除一个组 
DROP INDEX — 从一个数据库里删除一个索引 
DROP LANGUAGE — 删除一个用户定义的过程语言 
DROP OPERATOR — 从数据库里删除一个操作符 
DROP RULE — 从数据库里删除一个现有规则 
DROP SEQUENCE — 删除一个现存序列 
DROP TABLE — 从一个数据库里删除现存表 
DROP TRIGGER — 删除一个触发器的定义 
DROP TYPE — 从系统表里面删除一个用户定义类型 
DROP USER — 删除一个用户 
DROP VIEW — 从数据库里删除一个现存视图 
END — 提交当前事务 
EXPLAIN — 显示语句执行规划 
FETCH — 用一个游标获取行 
GRANT — 给一个用户,一个组或者所有用户赋予权限 
INSERT — 向数据库中插入新行 
LISTEN — 侦听一个通知条件的响应 
LOAD — 动态装载一个对象文件 
LOCK — 在一个事务内部显式锁定一个表 
MOVE — 移动游标的位置 
NOTIFY — 通知所有侦听某一通知条件的后端和前端 
REINDEX — 在单进程单用户 Postgres 条件下恢
复被破坏了的系统索引 
RESET — 为会话恢复缺省的运行时参数 
REVOKE — 废除一个用户,一个组或者所有用户的访问权限 
ROLLBACK — 退出当前的事务 
SELECT — 从一个表或者视图里检索行 
SELECT INTO — 从一个现有的表或者视图里创建新表 
SET — 为会话设置运行时参数 
SHOW — 为会话显示运行时参数 
TRUNCATE — 清空一个表 
UNLISTEN — 停止通知条件的侦听 
UPDATE — 调换一个表里某行的字段的值 
VACUUM — 清理和分析一个 Postgres 数据库 
这些是 Postgres 支持的SQL命令的索引.
----------------------------------------------------------------------------
----
ABORT
名称
ABORT  --  退出当前事务
语法
ABORT [ WORK | TRANSACTION ]
输入
无。 
输出
ROLLBACK 
成功的返回信息. 
NOTICE: ROLLBACK: no transaction in progress 
如果当前进程里没有任何事务存在. 
描述
ABORT 回卷当前事务并且废弃所有当前事务中做的更新.这个命令和SQL92 命令 RO
LLBACK 完全一样,只是由于历史原因而保留下来. 
注意
用 COMMIT 语句可以成功地结束/提交一个事务. 
用法
取消所有更改: 
ABORT WORK;
兼容性
SQL92
此命令是Postgres基于历史原因做的扩展.ROLLBACK 是 SQL92 中等价的命令. 
----------------------------------------------------------------------------
----
PostgreSQL7.0手册-用户手册-19. SQL命令-ALTER GROUP
编译:何伟平 laser@zhengmai (2001-04-21 21:39:30)
ALTER GROUP
名称
ALTER GROUP  --   向组中增加用户或删除用户
语法
ALTER GROUP name ADD USER username [, ... ]
ALTER GROUP name DROP USER username [, ... ]
输入
name 
要更改的组名称。 
username 
准备向组中增加或从组中删除的用户名。用户名必须已经存在。 
输出
ALTER GROUP 
更改成功的返回信息。 
描述
ALTER GROUP 用于向组中增加用户或者从组中删除用户。只有数据库超级用户才能使
用这条命令。向组中增加用户并不创建用户。同样从组中删除用户也不删除用户本身。
使用 CREATE GROUP 创建新组以及 DROP GROUP 删除一个组。
用法
向组中增加用户: 
ALTER GROUP staff ADD USER karl, john
从组中删除用户: 
ALTER GROUP workers DROP USER beth
兼容性
SQL92
SQL92 里没有 ALTER GROUP 语句。角(roles)的概念类似。
________________________________________________
PostgreSQL7.0手册-用户手册-19. SQL命令-ALTER TABLE
编译:何伟平 laser@zhengmai (2001-04-21 21:40:56)
ALTER TABLE
名称
ALTER TABLE — 更改表属性
语法
ALTER T
ABLE table [ * ]
    ADD [ COLUMN ] column type
ALTER TABLE table [ * ]
    ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAUL
T }
ALTER TABLE table [ * ]
    RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
    RENAME TO newtable
ALTER TABLE table
    ADD table constraint definition
Inputs
table 
试图更改的现存表的名称. 
column 
现存或新的列名称. 
type 
新列的类型. 
newcolumn 
现存列的新名称. 
newtable 
表的新名称. 
table constraint definition 
表的新的约束定义. 
New table constraint for the table
输出
ALTER 
从被更名的列或表返回的信息. 
ERROR 
如果一个列或表不存在返回的信息.
描述
ALTER TABLE 变更一个现存表的定义.ADD COLUMN 形式用与 CREATE TABLE一样
的语法向表中增加一个新列/字段。ALTER COLUMN 形式允许你从列/字段中设置或者删
除缺省(值)。注意缺省(值)只对新插入的行有效。RENAME 子句可以在不影响相关
表中任何数据的情况下更改一个表或者列/字段的名称。因此,表或列/字段在此命令执
行后仍将是相同尺寸和类型。ADD table constraint definition 子句用与 CREA
TE TABLE一样的语法向表中增加一个新的约束。 
如果要改变表的属性,你必须是表的所有者. 
注意
COLUMN 关键字是多余的,可以省略. 
如果"*"跟在一个表名后面,表示该命令要对该表和所有继承级别低于该表的表进行操作
;缺省时,该属性(更改)不会增加到任何子表或修改任何子表的相关名称。当增加或
修改一个上级表(译注:继承级别高的表)的属性时总是应该这样的。否则,象下面这
样的在继承级上进行的查询 
SELECT NewColumn FROM SuperClass*
将不能工作,因为子表会比上级表少一个属性。 
在目前的实现里,新列/字段的缺省(值)和约束子句会被忽略。你可以随后用 ALTER
 TABLE 的 SET DEFAULT 形式设置缺省(值)。(你还不得不用 UPDATE 把已存
在行更新为缺省值。) 
在目前的实现里,只有 FOREIGN KEY 约束可以增加到表中.要创建或者删除一个唯
一约束,可以创建一个唯一索引(参阅 CREATE INDEX).要想增加 check (检查
)约束,你需要重建和重载该表,用的参数是 CREATE TABLE 命令的其他参数. 
要修改表的结构,你必须是表的所有人。不允许更改系统表结构的任何部分。PostgreS
QL 用户手册 里有关于继承的更多信息. 
请参考 CREATE TABLE 部分获取更多有效参数的描述. 
用法
向表中增加
一个 VARCHAR 列: 
ALTER TABLE distributors ADD COLUMN address VARCHAR(30);
对现存列改名: 
ALTER TABLE distributors RENAME COLUMN address TO city;
对现存表改名: 
ALTER TABLE distributors RENAME TO suppliers;
向表中增加一个外键约束: 
ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address)
 REFERENCES addresses(address) MATCH FULL
兼容性
SQL92ADD COLUMN 形式是兼容的,除了上面说的缺省(值)和约束外。ALTER COLUM
N 形式是完全兼容的。 
SQL92 对 ALTER TABLE 声明了一些附加的Postgres目前还不直接支持的功能: 
ALTER TABLE table DROP CONSTRAINT constraint { RESTRICT | CASCADE 
}
增加或删除表的约束(比如象检查约束,唯一约束或外键约束)。要创建或删除一个唯
一约束,对应地创建或删除一个唯一索引,要修改其他类型的约束,你需要重建和重载
该表,使用 CREATE TABLE  命令的其他参数. 
例如,删除表 distributors 的任何约束: 
CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors AS SELECT * FROM temp;
DROP TABLE temp;
ALTER TABLE table DROP [ COLUMN ] column { RESTRICT | CASCADE }
前,要删除一个现存的列,表必须重新创建和重新装载: 
CREATE TABLE temp AS SELECT did, city FROM distributors;   
DROP TABLE distributors;
CREATE TABLE distributors (
    did      DECIMAL(3)  DEFAULT 1,
    name     VARCHAR(40) NOT NULL,
);
INSERT INTO distributors SELECT * FROM temp;
DROP TABLE temp;
重命名列/字段和表名是 PostgreSQL 扩展。SQL92 没有提供这些。 
___________________________________________________
PostgreSQL7.0手册-用户手册-19. SQL命令-ALTER USER
编译:何伟平 laser@zhengmai (2001-04-21 21:41:21)
ALTER USER
名称
ALTER USER — 更改用户信息.
用法
ALTER USER username
    [ WITH PASSWORD 'password' ]
    [ CREATEDB | NOCREATEDB ] [ CREATEUSER | NOCREATEUSER ]
    [ VALID UNTIL 'abstime' ]
输入
username 
想做更改的用户的用户名。 
password 
此帐号所使用的新口令. 
CREATEDB, NOCREATEDB 
这个子句定义该用户创建数据库的能力。如果声明了 CREATEDB,该用户可以创建她自
己的数据库。用NOCREATEDB 将剥夺一个用户创建数据库的能力。 
CREATEUSER, NOCREATEUSER 
这个子句决定一个用户能否创建新用户。这个选项同样还令该用户成为超级用户,可以
超越所有访问限制。 
abstime 
该用户帐号口令的有效日期(和可选的时
间)。 
输出
ALTER USER 
更改成功的返回信息. 
ERROR: ALTER USER: user "username" does not exist 
如果声明的用户不存在返回的信息. 
描述
ALTER USER 用于更改用户的 Postgres 帐号的属性.只有一个数据库超级用户可以
用这个命令更改权限和口令有效期。普通用户只能更改他们自己的口令。 
使用 CREATE USER 创建新用户和 DROP USER 删除用户。
用法
更改一用户口令: 
ALTER USER davide WITH PASSWORD 'hu8jmn3';
更改一用户有效期 
ALTER USER manuel VALID UNTIL 'Jan 31 2030';
更改一用户有效期,声明其权限应该在用比UTC早一小时的时区记时的1998年5月4日正午
失效 
ALTER USER chris VALID UNTIL 'May 4 12:00:00 1998 +1';
赋予一用户创建新用户和新数据库的权限. 
ALTER USER miriam CREATEUSER CREATEDB;
兼容性
SQL92
在 SQL92里没有 ALTER USER 语句.该标准将用户定义部分交给具体数据库实现处
理.
————————————————————————————
PostgreSQL7.0手册-用户手册-19. SQL命令-BEGIN
编译:何伟平 laser@zhengmai (2001-04-21 21:41:48)
BEGIN
名称
BEGIN — 以链的模式开始一个事务
语法
BEGIN [ WORK | TRANSACTION ]
输入
WORK, TRANSACTION 
可选关键字。它们没有作用。 
输出
BEGIN 
这表明一个新的事务已经开始. 
NOTICE: BEGIN: already a transaction in progress 
这表明该事务已经运行,当前事务没有被影响. 
描述
缺省时,Postgres 以非链接模式(unchained mode)执行一个事务(在其他数据库系
统里也称之为“自动提交”("autocommit"))。换句话说,每个用户语句都是在其自
身的事务中运行并且在语句结束时隐含的调用一个提交(commit)(如果执行成功则提
交,否则调用一个回卷)。 BEGIN 以链接模式(chained mode)初始化一个用户事
务,也就是说所有 BEGIN 命令后的用户语句都将在一个事务里面执行直到一个显式的
 COMMIT,ROLLBACK,或执行退出。在链接模式里执行的语句很明显地快得多,因为事
务开始/提交(start/commit)需要大量的CPU和磁盘活动。在一个事务内部执行多条语
句时因为可能修改若干个相关的表因而同样需要一致性。 
在 Postgres 里缺省的事务隔离级别是 READ COMMITTED,这时在事务内部的查询只
看到查询提交之前的(数据)修改。所以,如果你需要更严格的事务隔离,你必须在 
BEGIN 后马上使用 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE。在 SER
IALIZABLE 模式里,查询将只能看到整个事务开始之前的修改。(实际上是在一个可串