概述表空间是数据库实际存储在文件系统中的位置,我来为大家科普一下关于postgresql架构使用方法?以下内容希望对你有帮助!

postgresql架构使用方法(postgresql常用语法)

postgresql架构使用方法

表空间

概述

表空间是数据库实际存储在文件系统中的位置。

通过使用表空间,管理员可以控制一个PostgreSQL安装的磁盘布局。这么做至少有两个用处。

  1. 如果初始化集群所在的分区或者卷空间不足,而又不能在逻辑上扩展,那么表空间可以被创建在一个不同的分区上,从而达到集群可用。
  2. 根据数据库对象的使用需求来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。

表空间与数据库的关系:

默认表空间

表空间管理

创建表空间

创建表空间语法

CREATE TABLESPACE tablespace_name [ OWNER user_name ] LOCATION 'directory' [ WITH ( tablespace_option = value [, ... ] ) ]

参数:

创建表空间

首先创建存储目录

$ mkdir -p /var/lib/pgsql/12/dbdata/mytb $ chown -R postgres:postgres /var/lib/pgsql/12/dbdata/mytb

CREATE TABLESPACE mytbspace LOCATION '/var/lib/pgsql/12/dbdata/mytb';

设置默认表空间

SET default_tablespace = mytbspace; # 查看默认表空间 SHOW default_tablespace;

查看表空间

查看所有的表空间

SELECT * FROM pg_tablespace; 或者 \db # 列出更详细的信息 \db

数据库创建数据库

PostgreSQL 创建数据库可以用以下三种方式:

CREATE DATABASE SQL语句创建

语法:

CREATE DATABASE name [ [ WITH ] [ OWNER [=] user_name ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace_name ] [ CONNECTION LIMIT [=] connlimit ] ]

参数

例子:

CREATE DATABASE test WITH OWNER test TEMPLATE=template0 ENCODING 'UTF8' TABLESPACE test CONNECTION LIMIT 100;

createdb命令创建

createdb是SQL命令CREATE DATABASE的封装。

语法:

createdb [connection-option...] [option...] [dbname [description]]

选项:

环境变量

示例:

$ createdb mytestdb

删除数据库

只有数据库所有者且当前数据库没有连接的情况下才能执行删除操作。

语法:

DROP DATABASE [ IF EXISTS ] name;

修改数据库

语法:

ALTER DATABASE name [ [ WITH ] option [ ... ] ] # option 可以是以下参数: CONNECTION LIMIT connlimit ALTER DATABASE name RENAME TO new_name ALTER DATABASE name OWNER TO new_owner ALTER DATABASE name SET TABLESPACE new_tablespace ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT } ALTER DATABASE name SET configuration_parameter FROM CURRENT ALTER DATABASE name RESET configuration_parameter ALTER DATABASE name RESET ALL

示例:

关闭数据库test上缺省的索引扫描:

ALTER DATABASE test SET enable_indexscan TO off;

schema创建schema

语法:

CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ] CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ] CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ] CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification # 其中 role_specification 可以是: user_name | CURRENT_USER | SESSION_USER

参数:

示例:

创建一个模式:

CREATE SCHEMA myschema;

为用户joe创建一个模式,该模式也将被命名为 joe:

CREATE SCHEMA AUTHORIZATION joe;

修改schema

语法:

ALTER SCHEMA name RENAME TO new_name ALTER SCHEMA name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }

删除schema

语法:

DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

参数:

用户角色管理创建用户

语法:

创建角色使用CREATE ROLE

CREATE USER name [ [ WITH ] option [ ... ] ] 这里 option 可以是: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid

描述:

CREATE USER现在是CREATE ROLE的一个别名。唯一的区别是 CREATE USER中LOGIN 被作为默认值,而NOLOGIN是 CREATE ROLE的默认值。

参数:

示例:

CREATE USER davide WITH PASSWORD 'jw8s0F4';

CREATE ROLE miriam WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01';

CREATE ROLE admin WITH CREATEDB CREATEROLE;

删除用户

语法:

DROP USER等同于DROP ROLE

DROP ROLE [ IF EXISTS ] name [, ...]

授权管理

授权

权限回收

创建用户到授权过程
  1. 创建表空间

$ mkdir -p /var/lib/pgsql/12/dbhome/test $ chown -R postgres:postgres /var/lib/pgsql/12/dbhome/ $ su - postgres $ psql postgres=# create tablespace test location '/var/lib/pgsql/12/dbhome/test'; CREATE TABLESPACE

  1. 创建用户

postgres=# create user test with password 'test'; CREATE ROLE

  1. 创建数据库

postgres=# CREATE DATABASE test WITH OWNER=test TEMPLATE=template0 ENCODING='UTF8' TABLESPACE=test CONNECTION LIMIT=100; postgres=# select oid,datname from pg_database; oid | datname ------- ----------- 14187 | postgres 1 | template1 14186 | template0 16390 | test (4 rows)

  1. 配置权限
  1. 创建新的schema并设置为默认schema

# 切换数据库 \c test; # 查看当前的search_path SHOW search_path; # 创建一个新的schema CREATE SCHEMA <schema名称>; # 默认schema更改为新的schema,在连接级别 SET search_path TO <schema名称>; # 将数据库的默认schema更改为新的schema ALTER DATABASE <数据库名> SET search_path TO <schema名称>; # 将用户的默认schema更改为新的schema ALTER USER <用户名> SET search_path to <schema名称>; # 把适用于该对象的所有权限都赋予目标角色 GRANT ALL ON SCHEMA <schema名称> TO <用户名>; GRANT ALL ON ALL TABLES IN SCHEMA <schema名称> TO <用户名>;

其他一些操作查看版本

select version(); select PostGIS_Full_Version();

查看所有系统表

select * from pg_tables

查看当前用户

select * from current_user;

查看所有的角色用户

select * from pg_roles; select * from pg_user; # 或 \du

查看所有数据库

\l

,