archlinux 使用 postgresql
默认安装后已创建 postgres 系统用户
$ sudo -iu postgres # Or su - postgres for root
数据目录初始化
[postgres]$ initdb --locale=zh_CN.UTF-8 -E UTF8 -D /var/lib/postgres/data
退出此用户,启动服务 postgresql.service
$ createuser --interactive
创建数据库
$ createdb myDatabaseName
psql -d myDatabaseName #查看所有数据库 \l #切换数据库 \c <database> #列出所有用户及权限 \du #列出当前数据库所有表 \dt
配置 pg_hba.conf
查看日志
journalctl -u postgresql.service
二、概念介绍
1.模式 shceme
一个数据库可以有至少一个或多个模式,数据库中的内部资源(表、视图等)存放在模式中,默认是存放在该数据库的 public 模式中。为什么缺省对象都存放在 public 中的呢?因为在使用表(比如创建表)时,如果未指定模式名,那么系统将遍历当前搜索路径,直到找到一个匹配的对象。
使用
SHOW search_path;
在缺省的设置中,返回下面的东西:
search_path -------------- "$user",public
首先搜索当前用户同名的模式,因为还没有这样的模式存在, 所以这条记录被忽略。再搜索第二个,最终就会指向 public 模式。
官方建议是这样的:在管理员创建一个具体数据库后,应该为所有可以连接到该数据库的用户分别创建一个与用户名相同的模式,然后,将search_path设置为"$user"。
比如说,我当前的用户名为 xfe,则创建的 schema 也为 xfe,管理的角色是 super
CREATEUSER --interactive CREATE ROLE super LOGIN PASSWORD '123456'; CREATE SCHEMA xfe AUTHORIZATION super;
删除
DROP SCHEMA xfe; #如果要删除模式及其所有对象,请使用级联删除: DROP SCHEMA xfe CASCADE;
除了public和用户创建的模式之外,每个数据库都包含一个pg_catalog模式, 它包含系统表和所有内置数据类型、函数、操作符。pg_catalog总是搜索路径中的一部分。 如果它没有明确出现在路径中,那么它隐含地在所有路径之前搜索。
2.表空间
数据库创建时,默认的所有者是当前创建数据库的角色,默认的表空间是系统的默认表空间--pg_default。因为在PostgreSQL中,数据的创建是通过克隆数据库模板来实现的。
系统默认会克隆 template1 数据库,而 template1 数据库的默认表空间是 pg_default,这个表空间是在数据库初始化时创建的,所以所有template1中的对象将被同步克隆到新的数据库中。
完整的创建数据库语句应该是这样
CREATE DATABASE dbname OWNER kanon TEMPLATE template1 TABLESPACE tablespacename;
3.表空间与模式
表空间是一个存储区域,关联数据落地位置。将表的数据存在一个较慢的磁盘上的表空间,而将表的索引存在于一个快速的磁盘上的表空间。一个表空间中可以存储多个数据库,尽管PostgreSQL不建议这么做。
模式是一个逻辑划分,主要用于区分权限。一个数据库并不知直接存储表结构等对象的,而是在数据库中逻辑创建了至少一个模式,在模式中创建了表等对象,将不同的模式指派该不同的角色,可以实现权限分离,又可以通过授权,实现模式间对象的共享,并且,还有一个特点就是:public模式可以存储大家都需要访问的对象。
233
参考