部分版权(c)1996-2005,PostgreSQL 全球开发小组,部分版权(c)1994-1996 加州大学董事
(Portions copyright (c) 1996-2005,PostgreSQL Global Development GroupPortions Copyright (c) 1994-6 Regents of the University of California)
允许为任何目的使用,拷贝,修改和分发这个软件和它的文档而不收取任何费用, 并且无须签署因此而产生的证明,前提是上面的版权声明和本段以及下面两段文字出现在所有拷贝中。
(Permissionto use, copy, modify, and distribute this software and itsdocumentation for any purpose, without fee, and without a writtenagreement is hereby granted, provided that the above copyright noticeand this paragraph and the following two paragraphs appear in allcopies.)
(INNO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FORDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITSDOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OFTHE POSSIBILITY OF SUCH DAMAGE.)
(THEUNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OFMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWAREPROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OFCALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,ENHANCEMENTS, OR MODIFICATIONS.)
1.4)PostgreSQL 可以运行在哪些操作系统平台上?
一般说来,任何现在对 UNIX 兼容的操作系统之上都能运行PostgreSQL 。在安装指南里列出了发布时经过明确测试的平台。
PostgreSQl也可以直接运行在基于微软Windows-NT的操作系统,如Win2000 SP4,WinXP 和 Win2003,已制作完成的安装包可从
<!-- m --> http://pgfoundry.org/projects/pginstaller
<!-- m --> 下载,基于MSDOS的Windows操作系统 (Win95,Win98,WinMe)需要通过Cygwin模拟环境运行PostgreSQL。
同时也有一个为Novell Netware 6开发的版本可从
<!-- m --> http://forge.novell.com
<!-- m --> 获取,为OS/2(eComStation)开发的版本可从
<!-- m --> http://hobbes.nmsu.edu/cgi-bin/h-search ... pe&dir=%2F
<!-- m --> 下载。
1.5) 我从哪里能得到PostgreSQL?
通过浏览器可从http://www.postgresql.org/ftp/下载,也可通过FTP,从
<!-- m --> ftp://ftp.PostgreSQL.org/pub/
<!-- m --> 站点下载。
有两本关于PostgreSQL的书在线提供,在
<!-- m --> http://www.PostgreSQL.org/docs/awbook.html
<!-- m --> 和
<!-- m --> http://www.commandprompt.com/ppbook/
<!-- m --> 。 也有大量的PostgreSQL书籍可供购买,其中最为流行的一本是由Korry Douglas编写的。在
<!-- m --> http://techdocs.PostgreSQL.org/techdocs/bookreviews.php
<!-- m --> 上 上有大量有关PostgreSQL书籍的简介。 在
<!-- m --> http://techdocs.PostgreSQL.org/
<!-- m --> 上收集了有关PostgreSQL的大量技术文章。
客户端的命令行程序psql有一些以 \d 开头的命令,可显示关于类型,操作符,函数,聚合等信息,使用 \? 可以显示所有可用的命令。
我们的 web 站点包含更多的文档。
1.11) 我应该怎样学习 SQL ?
首先考虑上述提到的与PostgreSQL相关的书籍,另外一本是Teach Yourself SQL in 21 Days, Second Edition,其详细介绍的网址是
<!-- m --> http://members.tripod.com/er4ebus/sql/index.htm
<!-- m --> ,我们的许多用户喜欢The Practical SQL Handbook, Bowman, Judith S.编写,Addison-Wesley公司出版,其他的则喜欢 The Complete Reference SQL, Groff编写,McGraw-Hill公司出版。
在下列网址上也有很好的教程,他们是
<!-- m --> http://www.intermedia.net/support/sql/sqltut.shtm
<!-- m --><!-- m --> http://sqlcourse.com
<!-- m --> .
<!-- m --> http://www.w3schools.com/sql/default.asp
<!-- m --><!-- m --> http://mysite.verizon.net/Graeme_Birchall/id1.html
<!-- m -->
1.12)如何提交补丁或是加入开发队伍?
一些编程语言如PHP都有访问PostgreSQL的接口,Perl、TCL、Python以及很多其他语言的接口在
<!-- m --> http://gborg.postgresql.org
<!-- m --> 网站上的Drivers/Interfaces小节可找到, 并且通过Internet很容易搜索到。
在8.0版本里更改一个字段的数据类型很容易,可使用 ALTER TABLE ALTER COLUMN TYPE 。
在以前的版本中,可以这样做:
BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type);
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;
用 IS NULL 和 IS NOT NULL 测试这个字段,具体方法如下:
SELECT *
FROM tab
WHERE col IS NULL;
为了能对含 NULL字段排序,可在 ORDER BY 条件中使用 IS NULL和 IS NOT NULL 修饰符,条件为真 true 将比条件为假false 排在前面,下面的例子就会将含 NULL 的记录排在结果的上面部分:
SELECT *
FROM tab
ORDER BY (col IS NOT NULL)
4.10) 各种字符类型之间有什么不同?
类型
内部名称
说明
VARCHAR(n)
varchar
指定了最大长度,变长字符串,不足定义长度的部分不补齐
CHAR(n)
bpchar
定长字符串,实际数据不足定义长度时,以空格补齐
TEXT
text
没有特别的上限限制(仅受行的最大长度限制)
BYTEA
bytea
变长字节序列(使用NULL字符也是允许的)
"char"
char
单个字符
PostgreSQL 支持 SERIAL 数据类型。(字段定义为SERIAL后)将自动创建一个序列生成器,例如:
CREATE TABLE person (
id SERIAL,
name TEXT
);
会自动转换为以下SQL语句:
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT
);
参考 create_sequence 手册页获取关于序列生成器的更多信息。
4.11.2) 我如何获得一个插入的序列号的值?
一种方法是在插入之前先用函数 nextval() 从序列对象里检索出下一个 SERIAL 值,然后再用此值精确地插入。使用 4.11.1 里的例表,可用伪码这样描述:
new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
这样还能在其他查询中使用存放在 new_id 里的新值(例如,作为参照 person 表的外键)。 注意自动创建的 SEQUENCE对象的名称将会是 <table>_<serialcolumn>_seq, 这里 table 和serialcolumn 分别是你的表的名称和你的 SERIAL 字段的名称。
类似的,在 SERIAL 对象缺省插入后你可以用函数 currval() 检索刚赋值的 SERIAL 值,例如:
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");