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标准的一部分。


总结

  1. 第一次 postgres(即superuser)登录psql
  2. postgres 创建 用户A、数据库,并把 数据库关联给A,A拥有了登录条件
  3. 用户A登录
  4. 用户A创建表、创建schema
  5. 用户A可以吧表归入schema管理

其他的就是正常使用,即查即用

其他

1.帮助命令


#  psql中 返回命令帮助
\?

# 返回SQL语法提示
\help <SQL COMMAND>

2.链接数据库

# 以指定用户登录指定数据库
psql -U postgres -d <指定数据库>

3.登录的用户中,切换进不同数据库

/c <想要去的数据库>

参考

Mark24

Everything can Mix.