前端之家收集整理的这篇文章主要介绍了
PostgreSQL学习手册(数据库管理),
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一、概述:
@H_
301_6@
@H_
301_6@
数据库可以被看成是
sql对象(
数据库对象)的命名集合,通常而言,每个
数据库对象(表、
函数等)只属于一个
数据库。不过对于部分系统表而言,如 pg_database,是属于整个集群的。更准确地说,
数据库是模式的集合,而模式包含表、
函数等
sql对象。因此完整的对象层次应该是这样的:服务 器、
数据库、模式、表或其他类型的对象。
@H_
301_6@ 在与
数据库服务器建立连接时,该连接只能与一个
数据库形成关联,不允许在一个会话中进行多个
数据库的访问。如以postgres
用户登录,该
用户可以访 问的缺省
数据库为postgres,在
登录后如果执行下面的
sql语句将会收到Postgre
sql给出的相关
错误信息。
@H_
301_6@
postgres=# SELECT * FROM MyTest."MyUser".testtables;
@H_
301_6@ ERROR: cross-database references are not implemented: "otherdb.otheruser.so
Metable"
@H_
301_6@ LINE 1: select * from otherdb.otheruser.so
Metable
@H_
301_6@ 在Postgre
sql中,
数据库在物理上是相互隔离的,对它们的访问控制也是在会话层次上进行的。然而模式只是逻辑上的对象管理结构,是否能访问某个模式的对象是由权限系统来控制的。
@H_
301_6@ 执行下面的基于系统表的
查询语句可以列出现有的
数据库集合。
@H_
301_6@
SELECT datname FROM pg_database;
@H_
301_6@ 注:
psql应用程序的
\l元命令和
-l命令行选项也可以用来列出当前服务器中已有的
数据库。
@H_
301_6@
@H_
301_6@
二、创建数据库:
@H_
301_6@
@H_
301_6@ 在Postgre
sql服务器上执行下面的
sql语句可以创建
数据库。
@H_
301_6@
CREATE DATABASE db_name;
@H_
301_6@ 在
数据库成功创建之后,当前
登录角色将
自动成为此新
数据库的所有者。在
删除该
数据库时,也需要该
用户的特权。如果你想让当前创建的
数据库的所有者为其它角色,可以执行下面的
sql语句。
@H_
301_6@
CREATE DATABASE db_name OWNER role_name;
@H_
301_6@
@H_
301_6@
三、修改数据库配置:
@H_
301_6@
@H_
301_6@ Postgre
sql服务器提供了大量的运行时配置变量,我们可以根据自己的实际情况为某一
数据库的某一配置变量指定特殊值,通过执行下面的
sql命令可以使该
数据库的某一配置被设置为指定值,而不再使用缺省值。
@H_
301_6@
ALTER DATABASE db_name SET varname TO new_value;
@H_
301_6@ 这样在之后基于该
数据库的会话中,被
修改的配置值已经生效。如果要撤消这样的设置并恢复为原有的缺省值,可以执行下面的
sql命令。
@H_
301_6@
ALTER DATABASE dbname RESET varname;
@H_
301_6@
@H_
301_6@
四、删除数据库:
@H_
301_6@
@H_
301_6@ 只有
数据库的所有者和超级
用户可以
删除数据库。
删除数据库将会
删除数据库中
包括的所有对象,该操作是不可恢复的。见如下
删除sql命令:
@H_
301_6@
DROP DATABASE db_name;
@H_
301_6@
@H_
301_6@
五、表空间:
@H_
301_6@
@H_
301_6@ 在Postgre
sql中,表空间表示一组
文件存放的目录位置。在创建之后,就可以在该表空间上创建
数据库对象。通过使用表空间,
管理员可以控制一个 Postgre
sql服务器的磁盘布局。这样
管理员就可以根据
数据库对象的数据量和数据使用频度等参照来规划这些对象的存储位置,以便减少IO等待,从而 优化系统的整体运行
性能。比如,将一个使用频繁的索引放在非常可靠、高效的磁盘设备上,如固态硬盘。而将很少使用的
数据库对象存放在相对较慢的磁盘系统 上。下面的
sql命令用于创建表空间。
@H_
301_6@
CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data';
@H_
301_6@ 需要说明的是,表空间指定的位置必须是一个现有的空目录,且属于Postgre
sql系统
用户,如postgres。在成功创建之后,所有在该表空间上创建的对象都将被存放在这个目录下的
文件里。
@H_
301_6@ 在Postgre
sql中只有超级
用户可以创建表空间,但是在成功创建之后,就可以允许普通
数据库用户在其上创建
数据库对象了。要完成此操作,必须在表空间上给这些
用户授予CREATE权限。表、索引和整个
数据库都可以放在特定的表空间里。见如下
sql命令:
@H_
301_6@
CREATE TABLE foo(i int) TABLESPACE space1;
@H_
301_6@ 此外,我们还可以通过
修改
default_tablespace配置变量,以使指定的表空间成为缺省表空间,这样在创建任何
数据库对象时,如果没有
显示指定表空间,那么该对象将被创建在缺省表空间中,如:
@H_
301_6@
SET default_tablespace = space1;
@H_
301_6@
CREATE TABLE foo(i int);
@H_
301_6@ 与
数据库相关联的表空间用于存储该
数据库的系统表,以及任何使用该
数据库的服务器进程创建的临时
文件。
@H_
301_6@ 要
删除一个空的表空间,可以直接使用
DROP TABLESPACE命令,然而要
删除一个包含
数据库对象的表空间,则需要先将该表空间上的所有对象全部
删除后,才可以再在
删除该表空间。
@H_
301_6@ 要检索当前系统中有哪些表空间,可以执行以下
查询,其中pg_tablespace为Postgre
sql中的系统表。
@H_
301_6@
SELECT spcname FROM pg_tablespace;
@H_
301_6@ 我们还可以通过
psql程序的
\db元命令列出现有的表空间。