1.安装指导
1.1简版命令集
./configure
gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
请检查一下,看看你是否有足够的磁盘空间。你将大概需要近 65MB 用于存放安装过程中的源码树和大约 15MB 用于安装目录。一个空数据库大概需要 25MB 。然后在使用过程中大概需要在一个平面文本文件里存放同等数据量五倍的空间存储数据。如果你要运行回归测试,还临时需要额外的 90MB 。请用 df 命令检查剩余磁盘空间。
2.操作系统环境
2.1表空间
PostgreSQL 里的表空间允许数据库管理员在文件系统里定义那些代表数据库对象的文件存放位置。一旦创建了表空间,那么就可以在创建数据库对象的时候引用它。
通过使用表空间,管理员可以控制一个 PostgreSQL 安装的磁盘布局。这么做至少有两个用处。首先,如果初始化集群所在的分区或者卷用光了空间,而又不能逻辑上扩展或者别的什么操作,那么表空间可以在一个不同的分区上创建和使用,直到系统可以重新配置。
第二,表空间允许管理员根据数据库对象的使用模式安排数据位置,从而优化性能。比如,一个很频繁使用的索引可以放在非常快并且非常可靠的磁盘上,比如一种非常贵的固态设备。而同时,一个存储归档的数据,很少使用的或者对性能要求不高的表可以存储在一个便宜但比较慢的磁盘系统上。
要定义一个表空间,使用 CREATE TABLESPACE 命令,比如:
CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data';这个位置必须是一个现有的空目录,并且属于 PostgreSQL 系统用户。所有随后在该表空间创建的对象都将被存放在这个目录下的文件里。
【注意】通常在一个逻辑文件系统上建立多个表空间没有什么意义,因为无法控制一个逻辑文件系统里不同文件的位置。不过,PostgreSQL 并不做这方面的任何强制,并且它实际上并不知道文件系统边界。它只知道在指定的目录里存储文件。
创建表空间本身必须用数据库超级用户身份进行,但之后你就可以允许普通数据库用户利用它了。要做这件事情,在表空间上给这些用户授予 CREATE 权限。
表、索引和整个数据库都可以放在特定的表空间里。想要这么做的话,在给定表空间上有 CREATE 权限的用户必须把表空间的名字以一个参数的形式传递给相关的命令。比如,下面的命令在表空间 space1 上创建一个表:
CREATE TABLE foo(i int) TABLESPACE space1;另外,还可以使用 default_tablespace 参数:
SET default_tablespace = space1;
CREATE TABLE foo(i int);只要 default_tablespace 被设置为非空字符串,那么它就为没有明确使用 TABLESPACE 子句的 CREATE TABLE 和 CREATE INDEX 命令提供一个隐含的子句。
与一个数据库相关联的表空间用于存储该数据库的系统表,以及任何使用该数据库的服务器进程创建的临时文件。另外,如果在创建数据库对象时没有给出 TABLESPACE 子句(不管是明确的还是通过 default_tablespace),那么这是在该数据库里创建这些对象使用的缺省表空间。如果创建数据库时没有给它声明一个表空间,那么它使用与它拷贝的模版数据库相同的表空间。
initdb 自动创建两个表空间。pg_global 表空间用于共享的系统表。pg_default 是 template1 和 template0 数据库的缺省表空间(因此,这个表空间也将是任何其它数据库的缺省表空间)。
创建了表空间之后,它就可以用于任何数据库,只要请求的用户有足够权限。这意味着除非我们把使用这个表空间的所有数据库里的所有对象都删除掉,否则我们不能删除该表空间。
要删除一个空的表空间,使用 DROP TABLESPACE 命令。
检查 pg_tablespace 系统表就可以获取现有的表空间,比如
SELECT spcname FROM pg_tablespace;psql 程序的 \db 元命令也可以用于列出现有表空间。
为了简化表空间的实现,PostgreSQL 使用了大量符号连接。这就意味着表空间只能在支持符号连接的系统上使用。
目录 $PGDATA/pg_tblspc 包含指向集群里定义的每个非内置表空间的符号连接。尽管我们不建议,但是我们还是可能通过手工重定义这些连接来调整表空间的布局。两个警告:在服务器运行的时候不要这么干;并且在你重启服务器之后,更新 pg_tablespace 表以显示新的位置。如果你不这么做,pg_dump 将继续显示旧的表空间位置。
3.区域支持
概述
区域支持是在使用 initdb 创建一个数据库集群的时候自动初始化的。缺省时,initdb 将会按照它的执行环境的区域设置初始化数据库集群;因此如果你的系统已经设置为你的数据库集群想要的区域,那么你就没有什么可干的。如果你想使用其它的区域(或者你还不知道你的系统设置的区域是什么),那么你可以用 --locale 命令行选项告诉 initdb 你需要的区域究竟是哪个。比如:
initdb --locale=sv_SE这个例子就把区域设置为瑞典(sv),用瑞典语说话(SE)。其它的可能性是 en_US(美国英语)和 fr_CA(加拿大法语)等等。如果有多于一种字符集可以用于区域,那么声明看起来像下面这样:cs_CZ.ISO8859-2 。你的系统里有哪些可用的区域设置,它们的名字是什么,这些信息都取决于你的操作系统提供商提供了什么以及你安装了什么东西。在大多数系统上,命令 locale -a 将提供所有可用区域的一个列表。
有时候,把几种区域规则混合起来也很有用,比如,使用英语字符规则而用西班牙语信息。为了支持这些,我们有一套区域子范畴用于控制区域规则的某一方面:
LC_COLLATE 字符串排序顺序
LC_CTYPE 字符分类(什么是字母?它是这个字母的等效大写?)
LC_MESSAGES 信息的语言
LC_MONETARY 货币金额的格式
LC_NUMERIC 数字的格式
LC_TIME 日期和时间的格式
这些范畴名转换成 initdb 选项的名字以覆盖某个特定范畴的区域选择。比如,要把区域设置为加拿大法语,但使用美国的货币格式化规则,可以使用 initdb --locale=fr_CA --lc-monetary=en_US 。
如果你想要你的系统表现得像没有区域支持一样,那么使用特殊的区域 C 或 POSIX 。
一些区域范畴的性质是它们的值必需在数据库集群的生命期内固定。也就是说,一旦运行了 initdb 之后,你就再也不能更改它们了。LC_COLLATE 和 LC_CTYPE 就是这样的范畴。它们影响索引的排序顺序,因此它们必需保持固定,否则在文本字段上的索引将会崩溃。PostgreSQL 通过记录 initdb 看到的 LC_COLLATE 和 LC_CTYPE 来强迫这一点。服务器在启动的时候自动使用这两个数值。
其它区域范畴可以在服务器启动的时候根据需要设置运行时配置变量来改变(参阅节17.10.2获取细节)。initdb 选择的缺省值实际上只是做为服务器启动缺省写入 postgresql.conf 配置文件。如果你在 postgresql.conf 里面删除了这些缺省值,那么服务器将会继承来自运行环境的设置。
请注意服务器的区域行为是由它看到的环境变量决定的,而不是由客户端的环境变量影响的。因此,我们要在启动服务器之前认真地设置好这些变量。这样带来的一种情况是如果客户端和服务器设置成不同的区域,那么消息可能以不同的语言呈现,实际情况取决于它们的源是什么。
【注意】在我们谈到从执行环境继承区域的时候,我们的意思是在大多数操作系统上的下列动作:对于一个给定的区域范畴,比如字符集,按照下面的顺序评估这些环境变量,直到找到一个已设置的:LC_ALL, LC_COLLATE(变量对应相应的范畴), LANG 。如果这些环境变量一个都没有设置,那么区域缺省为 C 。
一些信息区域化库也使用环境变量 LANGUAGE ,它覆盖所有其它用于设置语言信息的区域设置。如果有问题,请参考你的操作系统文档,特别是 gettext 的文档获取更多信息。
要允许将信息翻译成用户选择的语言,制作时必需打开 NLS 选项。这个选项独立于其它区域支持。
行为
区域设置特别影响下面的 SQL 特性:
使用 ORDER BY 和区域的排序
使用 LIKE 子句的索引能力
upper, lower, initcap 函数
to_char 函数族
PostgreSQL 里使用非 C 或 POSIX 区域的缺点是速度。它降低了字符处理的速度并阻止了在 LIKE 类查询里面普通索引的使用。因此,只有在你实际上需要的时候才使用它。
为了允许 PostgreSQL 在非 C 区域下的 LIKE子句中使用索引,有好几个自定义的操作符类可以用。这些操作符类允许创建一个严格地比较每个字符的索引,而忽略区域比较规则。请参考节11.8获取更多信息。
问题
如果经过上面解释后区域支持仍然不能运转,那你就要检查一下操作系统的区域支持是否正确配置。要检查某个区域是否安装并且正常运转,你可以使用 locale -a 命令(如果你的系统提供了该命令)。
请检查核实 PostgreSQL 确实使用了你认为它该用的区域设置。LC_COLLATE 和 LC_CTYPE 的设置都是在 initdb 时决定的,如果不重复 initdb 是不可能改变的。其它的区域设置包括 LC_MESSAGES 和 LC_MONETARY 都是由服务器的启动环境决定的,但是可以在运行时修改。你可以用 SHOW 命令检查数据库正在使用的区域设置。
src/test/locale 目录包含 PostgreSQL 的区域支持测试套件。
那些通过分析错误信息处理服务器端错误的客户端应用很明显会有问题,因为服务器信息可能会以不同的语言表示。我们建议这类应用的开发人员改用错误代码机制。
维护信息翻译表需要许多志愿者的坚持不懈的努力,他们就是希望 PostgreSQL 以他们的语言说话的人。如果你的语言信息目前还不可用或者没有完全翻译完成,那么我们很欢迎你的协助。如果你想帮忙,那么请参考章46或者向开发者邮递列表发邮件
4.字符集
要想打开自动字符集转换功能,你必须告诉 PostgreSQL 你想在客户端使用的字符集(编码)。你可以用好几种方法实现这个目的。
用 psql 里的 \encoding 命令。\encoding 允许你动态修改客户端编码。比如,把编码改变为 SJIS ,键入:
\encoding SJIS使用 libpq 函数。\encoding 在做此用途的时候实际上是调用了 PQsetClientEncoding() 函数。
int PQsetClientEncoding(PGconn *conn, const char *encoding);这里的 conn 是一个与服务器的连接,encoding 是你想用的编码。如果编码设置成功它返回 0 ,否则返回 -1 。本次连接的当前编码可以用下面函数显示:
int PQclientEncoding(const PGconn *conn);请注意它只返回编码的 ID ,而不是像 EUC_JP 这样的编码符号字符串。要把编码 ID 转换为编码符号,你可以用:
char *pg_encoding_to_char(int encoding_id);可以用 SQL 命令 SET client_encoding TO 设置客户端编码:
SET CLIENT_ENCODING TO 'value';你还可以把 SQL 语法里的 SET NAMES 用于这个目的:
SET NAMES 'value';查询当前客户端编码:
SHOW client_encoding;返回缺省编码:
RESET client_encoding;使用 PGCLIENTENCODING 。如果在客户端的环境里定义了 PGCLIENTENCODING 环境变量,那么在与服务器进行连接时将自动选择客户端编码。这个编码随后可以用上面谈到的任何其它方法覆盖。
使用 client_encoding 配置变量。如果在 client_encoding 里设置了该变量,那么在与服务器建立了连接之后,这个客户端编码将自动选定。这个设置随后可以被上面提到的其它方法覆盖。
假如无法进行特定的字符转换,比如,你选的服务器编码是 EUC_JP 而客户端是 LATIN1 ,那么有些日文字符不能转换成 LATIN1 。这时将报告错误。
如果客户端字符集定义成了 SQL_ASCII ,那么编码转换会被关闭,不管服务器的字符集是什么都一样。和服务器一样,除非你的工作环境全部是 ASCII 数据,否则使用 SQL_ASCII 是不明智的。
分享到:
相关推荐
上海 PostgreSQL 培训课程是针对数据库管理员和 IT 专业人士设计的一系列学习资源,旨在帮助学员深入了解 PostgreSQL 数据库管理系统,并掌握其基本操作和高级特性。PostgreSQL,简称 Postgres,是一款开源的对象...
Postgresql培训ppt 基础培训课件
**PostgreSQL 9.3 DBA最佳实战培训** 在IT领域,数据库管理是至关重要的,尤其是在企业级应用中。PostgreSQL作为一个开源的关系型数据库管理系统,因其强大的功能、稳定性及高度的可扩展性,受到了广大开发人员和...
通过《PostgreSQL数据库工程师培训实战教程》的学习,你将掌握如何配置和管理PostgreSQL的复制、高可用性和集群,以及如何编写高效SQL。这不仅有助于提升个人技能,也有利于你在实际工作中构建稳定、高可用的数据库...
【PostgreSQL】是一种高度成熟且功能丰富的开源(对象-关系型)数据库管理系统,它在业界被认为是主流数据库之一,尤其在企业级应用中受到广泛青睐。PostgreSQL 的特性包括支持复杂查询、事务处理、多版本并发控制...
### PostgreSQL 性能优化培训知识点概述 #### 一、培训目标与内容概览 本次为期三天的培训旨在帮助参与者深入理解并掌握PostgreSQL数据库的性能优化技巧。通过一系列理论讲解和实战练习,使学员能够有效地识别和...
### PostgreSQL数据库优化培训视频概述 PostgreSQL是一款强大的开源对象关系型数据库系统,以其稳定性、可靠性及对SQL标准的广泛支持而著称。随着企业级应用对数据库性能的要求越来越高,对PostgreSQL进行有效的...
Postgresql 开发指南 Postgresql 是一个功能强大且功能丰富的关系型数据库管理系统,它提供了丰富的功能来帮助开发者快速构建高效的数据库应用程序。本文档将对 Postgresql 的一些重要概念和技术进行详细的讲解。 ...
**PostgreSQL:数据库管理系统概述** PostgreSQL,通常称为Postgres,是一种开源的对象关系数据库管理系统(ORDBMS),它以其强大的功能、稳定性和高度的可扩展性而受到全球开发者的广泛赞誉。这个“PostgreSQL从...
8. PostgreSQL培训内容概述: 培训内容涵盖逻辑结构基础、安装及文件结构、配置基础、数据库逻辑结构、数据备份与恢复、数据库权限及安全管理、基于时间点的数据恢复、运行时维护管理、数据类型、存储过程及调试、...
postgreSQL学习分享.pptx,公司内部资料,值得学习,新人专用
本“PostgreSQL数据库实战培训课程(速成版)”旨在帮助初学者迅速掌握PostgreSQL的核心概念和操作技巧,为你的IT职业生涯添砖加瓦。 课程概述: 在本速成课程中,你将深入学习PostgreSQL的基础知识,包括安装与...
德哥的Postgresql数据库优化的培训视频,从Postgtesql的安装,配置,到数据库配置文件postgresql.conf的讲解,执行计划的查看,非常详细。
PostgreSQL全套课程,全套24.73G,包含免密视频、课件、相关文档,课程目录: 01.PostgreSQL9 从零开始学...03.PostgreSQL 9.3 DBA5天培训 24课 04.PostgreSQL 9.3 优化培训视频 19课 05.DBA团队每天16点技术分享 7课
《PostgreSQL 开发规范培训手册》是一份详细指导开发人员理解和使用开源数据库系统PostgreSQL的文档,特别强调了在国家政策推动下,PostgreSQL作为Oracle数据库的替代选择,已广泛应用于运营商、电力、水利、交通等...
分享一套数据库课程——PostgreSQL DBA实战视频教程(2023完结新课),文档资料齐全。希望对大家有帮助。
PostgreSQL数据库是一种开源的对象关系数据库管理系统(ORDBMS),它采用灵活的BSD许可证。PostgreSQL具有许多特性,包括复杂查询、外键、触发器、视图以及多版本并发控制(MVCC)。它是高度符合SQL标准的数据库系统...