PostgreSQL学习手册(数据库管理)

1、概述:

    数据库能够被当作是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命令行选项也能够用来列出当前服务器中已有的数据库。
    
2、建立数据库:

    在PostgreSQL服务器上执行下面的SQL语句能够建立数据库。
     CREATE DATABASE db_name;
    在数据库成功建立以后,当前登陆角色将自动成为此新数据库的全部者。在删除该数据库时,也须要该用户的特权。若是你想让当前建立的数据库的全部者为其它角色,能够执行下面的SQL语句。
     CREATE DATABASE db_name OWNER role_name;

3、修改数据库配置:

    PostgreSQL服务器提供了大量的运行时配置变量,咱们能够根据本身的实际状况为某一数据库的某一配置变量指定特殊值,经过执行下面的SQL命令可使该数据库的某一配置被设置为指定值,而再也不使用缺省值。
    ALTER DATABASE db_name SET varname TO new_value;
    这样在以后基于该数据库的会话中,被修改的配置值已经生效。若是要撤消这样的设置并恢复为原有的缺省值,能够执行下面的SQL命令。
     ALTER DATABASE dbname RESET varname;

4、删除数据库:

    只有数据库的全部者和超级用户能够删除数据库。删除数据库将会删除数据库中包括的全部对象,该操做是不可恢复的。见以下删除SQL命令:
     DROP DATABASE db_name;
   
5、表空间:

    在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元命令列出现有的表空间。
相关文章
相关标签/搜索