您正在查看: PostgreSQL 分类下的文章

规划器如何使用统计信息参考书目

参考书目

这里是一些经我们挑选的关于SQL和PostgreSQL的参考和读物。

一些来自最初的POSTGRES开发队伍的白皮书和技术报告可以在加州大学伯克利分校计算机科学系网站 获取。

SQL 参考书

Judith Bowman, Sandra Emerson, and Marcy Darnovsky, The Practical SQL Handbook: Using SQL Variants, Fourth Edition, Addison-Wesley Professional, ISBN 0-201-70309-2, 2001.

C. J. Date and Hugh Darwen, A Guide to the SQL Standard: A user's guide to the standard database language SQL, Fourth Edition, Addison-Wesley, ISBN 0-201-96426-0, 1997.

C. J. Date, An Introduction to Database Systems, Eighth Edition, Addison-Wesley, ISBN 0-321-19784-4, 2003.

Ramez Elmasri and Shamkant Navathe, Fundamentals of Database Systems, Fourth Edition, Addison-Wesley, ISBN 0-321-12226-7, 2003.

Jim Melton and Alan R. Simon, Understanding the New SQL: A complete guide, Morgan Kaufmann, ISBN 1-55860-245-3, 1993.

Jeffrey D. Ullman, Principles of Database and Knowledge: Base Systems, Volume 1, Computer Science Press, 1988.

PostgreSQL-参考文档

Stefan Simkovics, Enhancement of the ANSI SQL Implementation of PostgreSQL, Department of Information Systems, Vienna University of Technology, November 29, 1998.

Discusses SQL history and syntax, and describes the addition of INTERSECT and EXCEPT constructs into PostgreSQL. Prepared as a Master's Thesis with the support of O. Univ. Prof. Dr. Georg Gottlob and Univ. Ass. Mag. Katrin Seyr at Vienna University of Technology.

A. Yu and J. Chen, The POSTGRES Group, The Postgres95 User Manual, University of California, Sept. 5, 1995.

Zelaine Fong, POSTGRES查询优化器的设计与实现 , University of California, Berkeley, Computer Science Department.

学报和文献

Nels Olson, Partial indexing in POSTGRES: research project, University of California, UCB Engin T7.49.1993 O676, 1993.

L. Ong and J. Goh, "A Unified Framework for Version Modeling Using Production Rules in a Database System", ERL Technical Memorandum M90/33, University of California, April, 1990.

L. Rowe and M. Stonebraker, " The POSTGRES data model", Proc. VLDB Conference, Sept. 1987.

P. Seshadri and A. Swami, "Generalized Partial Indexes(cached version)", Proc. Eleventh International Conference on Data Engineering, 6-10 March 1995, IEEE Computer Society Press, Cat. No.95CH35724, 1995, 420-7.

M. Stonebraker and L. Rowe, " The design of POSTGRES POSTGRES的设计", Proc. ACM-SIGMOD Conference on Management of Data, May 1986.

M. Stonebraker, E. Hanson, and C. H. Hong, "POSTGRES 规则系统的设计", Proc. IEEE Conference on Data Engineering, Feb. 1987.

M. Stonebraker, " POSTGRES存储系统的设计", Proc. VLDB Conference, Sept. 1987.

M. Stonebraker, M. Hearst, and S. Potamianos, " POSTGRES规则系统的注解 ", SIGMOD Record 18(3), Sept. 1989.

M. Stonebraker, " 部分索引的实例", SIGMOD Record 18(4), Dec. 1989, 4-11.

M. Stonebraker, L. A. Rowe, and M. Hirohama, " POSTGRES的实现", Transactions on Knowledge and Data Engineering 2(1), IEEE, March 1990.

M. Stonebraker, A. Jhingran, J. Goh, and S. Potamianos, " 有关数据库系统的规则,过程,缓存和视图", Proc. ACM-SIGMOD Conference on Management of Data, June 1990.

BKI后端接口系统初始化的BKI文件的结构

55.3. 系统初始化的BKI文件的结构

open命令打开的表需要系统事先存在另外一些基本的表 ,在这些表存在并拥有数据之前,不能使用open命令。 这些最低限度必须存在的表是pg_class, pg_attribute, pg_proc, and pg_type。 为了允许这些表自己被填充, 带bootstrap 选项的create隐含打开所创建的表用于插入数据。

同样, declare index和declare toast 命令也不能在它们所需要的系统表创建并填充之前使用。

因此,postgres.bki文件的结构必须是这样的:

  • create bootstrap 其中一个关键表

  • insert 数据,这些数据至少描述这些关键表本身

  • close

  • 重复创建和填充其它关键表

  • create (不带 bootstrap)一个非关键表

  • open

  • insert需要的数据

  • close

  • 重复创建其它非关键表

  • 定义索引和toast表

  • build indices

  • 当然,肯定还有其它未记录文档的顺序依赖关系。

    BKI后端接口例子

    55.4. 例子

    下面的命令将创建名为 test_table的表,它的OID是420,该表有两个字段cola和colb , 字段类型分别为int4和text, 然后向该表插入两行:

    create test_table 420 (cola = int4, colb = text)
    open test_table
    insert OID=421 ( 1 "value1" )
    insert OID=422 ( 2 _null_ )
    close test_table

    BKI后端接口BKI文件格式

    55.1. BKI 文件格式

    本节描述PostgreSQL 后端是如何理解BKI文件的。如果把postgres.bki 文件拿来做例子,这些描述将变得容易理解些。

    BKI的输入是由一系列的命令组成的,而命令是由 一些记号组成的, 具体是什么,由命令语法决定。这些记号通常是由空格分隔的, 但是如果没有歧义的话,可以不用。没有什么特殊的命令分隔符,当下一个记号在语法上无法属于前面的命令时开始新的一条命令。 为了保持清晰,通常会是把新的一条命令放在新的一行上。 记号可以是某些关键字,特殊字符(圆括弧,逗号等),数字或者 双引号字符串,所有的这些都对大小写敏感。

    以#开头的行会被忽略。

    BKI后端接口BKI命令

    55.2. BKI命令

    create tablename tableoid [bootstrap] [shared_relation] [without_oids] [rowtype_oid oid] (name1 = type1 [, name2 = type2, ...])

    创建了一个名为tablename, OID为tableoid的表, 在圆括弧中定义的是表字段。

    bootstrap.c直接支持以下字段类型: bool bytea, char (1字节), name, int2, int4, regproc, regclass, regtype, text, oid, tid, xid, cid, int2vector, oidvector, _int4 (数组), _text (数组), _oid (数组), _char (数组), _aclitem (数组)。尽管可以创建包含其他类型字段的表,但是只有在创建完pg_type并且填充了合适的记录后才可以。 这实际上就意味着在系统初始化表中只能使用这些字段类型,而非系统初始化表可以使用任意内置类型。

    如果声明了bootstrap,那么将只在磁盘上创建表; 不会向pg_class,pg_attribute, 中输入任何东西。因此这样的表将无法被普通的SQL语句访问,直到那些记录被 (用insert命令)填入。这个选项用于自己创建pg_class等.

    如果声明了shared_relation,那么表就作为共享表创建。 除非声明了without_oids ,否则将会有OID。 表的行类型OID(pg_type OID) 可以从rowtype_oid 子项随意的指定; 如果没有声明,会自动的生成一个OID。 (如果bootstrap被指定,那么The rowtype_oid将会是无效的, 但是它仍可以被提供给文档。)

    open tablename

    打开一个名为tablename 的表,准备插入数据。任何当前被打开的表都会被关闭。

    close [tablename]

    关闭已经被打开的表。给出的表名是用于交叉检验,但并不是必须的。

    insert [OID = oid_value] ( value1 value2 ... )

    打开一个表,向其中插入一行数据, value1, value2作为字段,oid_value作为OID。 如果oid_value 的值是零,或者被字句被忽略,同时该表已经有了OID,那么会被指定下一个可用OID。

    NULL可以用特殊的关键字 _null_声明,包含空白的值必须用双引号括起。

    declare [unique] index indexname indexoid on tablename using amname ( opclass1 name1 [, ...] )

    在一个名为 tablename的表上用 amname 访问方法 创建一个OID是indexoid 的名为indexname的索引。 索引的字段为name1, name2 等。 而使用的操作符类型分别是 opclass1, opclass2等。 将会创建索引文件和恰当的系统表记录,但是索引内容不会被此命令初始化。

    declare toast toasttableoid toastindexoid on tablename

    为表名为tablename创建一个TOAST表 。 这个TOAST的OID是toasttableoid, 其索引的OID是toastindexoid。 与declare index一样, 索引的填充会被推迟。

    build indices

    填充前面声明的索引。