Mark24
Postgresql从初始化到直接用
简单梳理下 Postgresql的初始化到直接使用。
记录下踩的坑和基本概念
一、新增概念
1.权限
pg里面的 privilege 就是其他数据库的 rights或者 permission ; grant 负责赋予权限。
2.角色
pg简化了权限系统,使用 角色来承载权限。角色和用户是一样的,区别就是用户多了一个登录。用户组也可以用角色表示,只要角色声明可继承(默认就是可继承,可以显示声明方便可读)
总结: role代表 用户、角色、用户组。
3.Schema
PG的包容层次是:
PG实例 {
DataBase数据库 {
Schema {
Table 表 {}
}
}
}
在这里 Schema的作用有点像逻辑上的一个分组,他负责把一些 Table 分类,并且也含有权限控制。
Schema的功能就很像 MySql 里面的 database
二、初始化数据库
1.登录数据库(坑在于不同系统不同)
pg会用系统默认的用户创建一个superuser,但是问题是 我个人发现 Linux里面是合规的 用户名就是用户。 MacOS不这样认为,他的用户感觉是更子概念。采用的是根目录的用户名初始化了 superuser。
这会导致第一次登录pg很麻烦
1.1 Ubuntu/Linux 登录:
sudo su - postgres psql
解释下使用了 Linux的su命令,首先必须以sudo切换(必须,经验)postgres用户,后面可以跟上直接执行的命令 psql
而 psql会默认以你当前用户、当前用户名的数据库登录。
上面等价于
# 切换用户
sudo su - postgres
# 指定用户登录
# 第一个参数是 数据库,-U后面是用户,数据不填就默认和 postgres同名
psql postgres -U postgres
# 也可以 直接 psql 以当前用户直接登录
psql
1.2 Mac OS 可能是一致处于超级用户下面的子账户
# 不切换用户,可以指定用户就登录
psql -U postgres
1.3 Debian 11
Debian下默认没有给 postgres密码,并且认为它是普通用用户
sudo passwd postgres
# 单独设置 postgres 用户的密码
切换postgres 然后登陆
su - postgres
#postgres@debian:~$
psql
PostgreSQL@14 在 MacOS 13 上面无法进入默认用户
可以首先创建超级用户,再进入
# 没有交付参数的用户无法在命令行中交互。pg 增加了行为限制。
# 实际上自由加了交付参数的才能真正给用户用,其他的用于服务对象
createuser postgres --interactive
# or make a superuser postgresl just with
# 可以用 createuser -h 查看更多参数
# -s 是 superuser 但是如果不加交付参数,无法在终端中使用
createuser postgres -s
三、想要使用 PG的设置步骤
step1 正确以 postgres 登录 psql
根据 上面第二小节,让自己正确的 以 postgres 用户登录 psql
postgres 是在所有平台上通用的 超级用户。只要以postgres登录,一切都好说。
step2 创建自己的角色
postgres是superuser,在创造自己的数据库前,需要创建一个用户。当然以postgres也可以,不过不提倡使用superuser做所有事情。 减少superuser的使用可以减少破坏性。
CREATE ROLE mydb_admin LOGIN PASSWORD 'something';
通过上面语句创建一个角色,也可以用等价语句
CREATE USER mydb_admin PASSWORD 'something';
我们从第一小节知道 user和 role 就差了一个 LOGIN属性
step3 创建数据库 并设定其所有者
CREATE DATABASE mydb WITH OWNER = mydb_admin;
我们拥有了一个用户 和数据库(其实也可以设计为同名)。我们设置的用户就可以自行登录了。
剩下的视角交给我们登录自己的用户。
step4 用 mydb_admin 身份 登录并且创建 schema 和表
以新用户登录
psql -U mydb_admin
我们可以自省创建表。默认表将会放在 public的 schema中
# 创建表
create table user_profile ( id int, name text);
# 查看所有表
\dt
我们也可以自己设置 schema
# 创建一个 schema
create schema customer1;
# 查看搜有的schema
\dn
把自己的表移动到对应的 schema中管理
# 把表修改到 schema中
alter table user_profile set schema customer1;
# 可以查看表的属性更改
\dt
思考:之所以 create table 没有带 schema的语句,我的猜想是因为 SCHEMA是 PG里面自己的结构。他不是 SQL标准的一部分。
总结
- 第一次 postgres(即superuser)登录psql
- postgres 创建 用户A、数据库,并把 数据库关联给A,A拥有了登录条件
- 用户A登录
- 用户A创建表、创建schema
- 用户A可以吧表归入schema管理
其他的就是正常使用,即查即用
其他
1.帮助命令
# psql中 返回命令帮助
\?
# 返回SQL语法提示
\help <SQL COMMAND>
2.链接数据库
# 以指定用户登录指定数据库
psql -U postgres -d <指定数据库>
3.登录的用户中,切换进不同数据库
/c <想要去的数据库>
参考
- 《SQL基础教程(第2版)》 这个是以Postgresql举例并且介绍SQL,推荐
- 《Postgresql即学即用(第三版)》 书名字有误导,更适合有概念的人快速使用
- PG官方文档中文 有问题就来这里查阅吧