云服务器网:购买云服务器和VPS必上的网站!

PostgreSQL教程(十三):数据库管理详解

一、概述:数据库可以被看成是SQL对象(数据库对象)的命名集合,通常而言,每一个数据库对象(表、函数等)只属于一个数据库。不过对部份系统表而言,如pg_database,是属于全部集群的。更准确地说,数据库是模式的集合,而模式包括表、函数等SQL对象。因此完全

一、概述:

数据库可以被看成是SQL对象(数据库对象)的命名集合,通常而言,每一个数据库对象(表、函数等)只属于一个数据库。不过对部份系统表而言,如pg_database,是属于全部集群的。更准确地说,数据库是模式的集合,而模式包括表、函数等SQL对象。因此完全的对象层次应当是这样的:服务器、数据库、模式、表或其他类型的对象。

在与数据库服务器建立连接时,该连接只能与一个数据库构成关联,不允许在一个会话中进行多个数据库的访问。如以postgres用户登录,该用户可以访问的缺省数据库为postgres,在登录后如果履行下面的SQL语句将会收到PostgreSQL给出的相关毛病信息。

postgres=# SELECT * FROM MyTest.”MyUser”.testtables;
ERROR: cross-database references are not implemented: “otherdb.otheruser.sometable”
LINE 1: select * from otherdb.otheruser.sometable

在PostgreSQL中,数据库在物理上是相互隔离的,对它们的访问控制也是在会话层次上进行的。但是模式只是逻辑上的对象管理结构,会不会能访问某个模式的对象是由权限系统来控制的。
履行下面的基于系统表的查询语句可以列出现有的数据库集合。

SELECT datname FROM pg_database;

注:psql利用程序的\l元命令和-l命令行选项也能够用来列出当前服务器中已有的数据库。

二、创建数据库:

在PostgreSQL服务器上履行下面的SQL语句可以创建数据库。

CREATE DATABASE db_name;

在数据库成功创建以后,当前登录角色将自动成为此新数据库的所有者。在删除该数据库时,也需要该用户的特权。如果你想让当前创建的数据库的所有者为其它角色,可以履行下面的SQL语句。

CREATE DATABASE db_name OWNER role_name;

三、修改数据库配置:

PostgreSQL服务器提供了大量的运行时配置变量,我们可以根据自己的实际情况为某一数据库的某一配置变量指定特殊值,通过履行下面的SQL命令可使该数据库的某一配置被设置为指定值,而不再使用缺省值。

ALTER DATABASE db_name SET varname TO new_value;

这样在以后基于该数据库的会话中,被修改的配置值已生效。如果要撤销这样的设置并恢复为原本的缺省值,可以履行下面的SQL命令。

ALTER DATABASE dbname RESET varname;

四、删除数据库:

只有数据库的所有者和超级用户可以删除数据库。删除数据库将会删除数据库中包括的所有对象,该操作是不可恢复的。见以下删除SQL命令:

DROP DATABASE db_name;


五、表空间:

在PostgreSQL中,表空间表示一组文件寄存的目录位置。在创建以后,就能够在该表空间上创建数据库对象。通过使用表空间,管理员可以控制一个PostgreSQL服务器的磁盘布局。这样管理员就能够根据数据库对象的数据量和数据使用频度等参照来计划这些对象的存储位置,以便减少IO等待,从而优化系统的整体运行性能。比如,将一个使用频繁的索引放在非常可靠、高效的磁盘装备上,如固态硬盘。而将很少使用的数据库对象寄存在相对较慢的磁盘系统上。下面的SQL命令用于创建表空间。

CREATE TABLESPACE fastspace LOCATION ‘/mnt/sda1/postgresql/data’;

需要说明的是,表空间指定的位置一定要是一个现有的空目录,且属于PostgreSQL系统用户,如postgres。在成功创建以后,所有在该表空间上创建的对象都将被寄存在这个目录下的文件里。
在PostgreSQL中只有超级用户可以创建表空间,但是在成功创建以后,就能够允许普通数据库用户在其上创建数据库对象了。要完成此操作,一定要在表空间上给这些用户授与CREATE权限。表、索引和全部数据库都可以放在特定的表空间里。见以下SQL命令:

CREATE TABLE foo(i int) TABLESPACE space1;

另外,我们还可以通过修改default_tablespace配置变量,以使指定的表空间成为缺省表空间,这样在创建任何数据库对象时,如果没有显示指定表空间,那末该对象将被创建在缺省表空间中,如:

SET default_tablespace = space1;
CREATE TABLE foo(i int);

与数据库相关联的表空间用于存储该数据库的系统表,和任何使用该数据库的服务器进程创建的临时文件。
要删除一个空的表空间,可以直接使用DROP TABLESPACE命令,但是要删除一个包括数据库对象的表空间,则需要先将该表空间上的所有对象全部删除后,才可以再在删除该表空间。

要检索当前系统中有哪几种表空间,可以履行以下查询,其中pg_tablespace为PostgreSQL中的系统表。

SELECT spcname FROM pg_tablespace;

我们还可以通过psql程序的\db元命令列出现有的表空间。

本文来源:https://www.yuntue.com/post/151933.html | 云服务器网,转载请注明出处!

关于作者: yuntue

云服务器(www.yuntue.com)是一家专门做阿里云服务器代金券、腾讯云服务器优惠券的网站,这里你可以找到阿里云服务器腾讯云服务器等国内主流云服务器优惠价格,以及海外云服务器、vps主机等优惠信息,我们会为你提供性价比最高的云服务器和域名、数据库、CDN、免费邮箱等企业常用互联网资源。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注