当前位置: 首页 > news >正文

postgresql的用户、数据库和表

在 PostgreSQL 中,用户、数据库和表是关系型数据库系统的基本组成部分。理解这些概念对数据库管理和操作至关重要。下面是对这些概念的详细解释:

1. 用户(User)

在 PostgreSQL 中,用户(也称为 角色)是一个用于身份验证和授权的实体。每个用户都有一个唯一的名称,并且可以有不同的权限(比如连接数据库、创建表、查询数据等)。

  • 超级用户(Superuser):拥有所有权限,能够执行任何操作,包括绕过权限限制。
  • 普通用户:只能执行被授予权限的操作。普通用户的权限可以细分,例如可以只允许查询数据,但不能删除数据或创建新表。

用户和角色的区别:

  • 在 PostgreSQL 中,“用户”和“角色”通常是同义的,因为每个用户都是一个角色,并且角色可以有权限来执行操作。
  • 角色有两种类型:
    • 登录角色(Login Role):能够用于连接数据库的角色(即“用户”)。例如,testuser 是一个登录角色,可以用于身份验证。
    • 非登录角色:不允许登录,只是用来分配权限。通常用于分组,例如一个用于管理特定权限的角色。

创建用户的基本命令:

CREATE USER username WITH PASSWORD 'password';

2. 数据库(Database)

在 PostgreSQL 中,数据库是存储所有数据、表、索引、视图、用户等信息的容器。每个 PostgreSQL 系统可以包含多个数据库,每个数据库相互独立,互不干扰。

  • 数据库用户:每个数据库都有一个所有者,通常是创建该数据库的用户。所有者可以授予其他用户对该数据库的访问权限。
  • 访问控制:通过 PostgreSQL 的权限系统,可以限制哪些用户可以访问特定的数据库,以及他们可以执行哪些操作。

创建数据库的基本命令:

CREATE DATABASE dbname;
  • 默认数据库:PostgreSQL 会在安装时创建一些默认的数据库,例如 postgrestemplate0template1。其中,template0template1 是模板数据库,通常不用于直接操作。

3. 表(Table)

是 PostgreSQL 数据库中的基本数据存储单元。表由行和列组成,每一行表示一个数据记录,每一列表示一个数据字段。每个表都有一个名称,并且可以定义不同的数据类型。

  • 列(Column):表的列定义了存储的数据类型,比如整数、文本、日期等。
  • 行(Row):表的行表示实际的数据记录,每行可以包含多个列的值。
  • 主键(Primary Key):每个表通常都有一个主键,确保每行数据的唯一性。主键列的值不能重复,并且不能为空。
  • 外键(Foreign Key):表与表之间的关联通过外键来实现,外键列指向另一个表的主键或唯一键。

创建表的基本命令:

CREATE TABLE tablename (column1 datatype,column2 datatype,...
);

例如:

CREATE TABLE employees (id SERIAL PRIMARY KEY,name VARCHAR(100),position VARCHAR(50)
);

4. 数据库与用户的关系

  • 一个用户可以有多个数据库的访问权限,而每个数据库也可以有多个用户。
  • 所有者:每个数据库都有一个所有者角色,默认是创建该数据库的用户。所有者具有完全的权限,其他用户可以被授予不同的访问权限。

例如,创建数据库时,你可以指定一个数据库的所有者:

CREATE DATABASE testdb OWNER devuser;

这个命令会创建一个名为 testdb 的数据库,所有者是 devuser

5. 表与数据库的关系

  • 表属于数据库。一个数据库中可以有多个表,每个表存储一类相关的数据。
  • 当你连接到某个数据库时,你可以在该数据库内创建、删除或修改表。

例如,假设你已连接到 testdb 数据库,你可以在其中创建一个名为 users 的表:

CREATE TABLE users (id SERIAL PRIMARY KEY,username VARCHAR(50) UNIQUE NOT NULL,password VARCHAR(50) NOT NULL
);

6. 常见的权限控制

PostgreSQL 的权限控制是基于角色的,通常你需要授予不同的用户对不同数据库和表的不同权限。权限可以是:

  • 连接权限:允许某个用户连接到某个数据库。
  • 表级权限:例如 SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)等。
  • 数据库级权限:例如创建表、创建视图等。

授予权限的命令:

GRANT SELECT, INSERT ON table_name TO username;

撤销权限的命令:

REVOKE SELECT, INSERT ON table_name FROM username;

总结:

  • 用户(User/Role):身份认证和授权的实体,控制谁能访问数据库。
  • 数据库(Database):存储数据的容器,一个 PostgreSQL 实例可以包含多个数据库。
  • 表(Table):数据库中存储数据的结构,包含多个列和行。

PostgreSQL 的权限管理系统使得可以根据角色来控制哪些用户可以访问哪些数据库,以及他们可以执行哪些操作。

http://www.lryc.cn/news/531148.html

相关文章:

  • 对游戏宣发的粗浅思考
  • 【Java基础-42.3】Java 基本数据类型与字符串之间的转换:深入理解数据类型的转换方法
  • (9) 上:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同
  • webpack传输性能优化
  • 智能小区物业管理系统打造高效智能社区服务新生态
  • (done) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)
  • 面试经典150题——栈
  • openmv的端口被拆分为两个 导致电脑无法访问openmv文件系统解决办法 openmv USB功能改动 openmv驱动被更改如何修复
  • 自制虚拟机(C/C++)(三、做成标准GUI Windows软件,扩展指令集,直接支持img软盘)
  • 算法题(56):旋转链表
  • 解决PyG安装中torch-sparse安装失败问题:详细指南
  • 如何创建折叠式Title
  • go-zero学习笔记(三)
  • Wildcard工具详解:从入门到精通
  • 冰蝎v3.0 beta7来啦
  • React中使用箭头函数定义事件处理程序
  • 记忆化搜索和动态规划 --最长回文子串为例
  • Tree Compass( Codeforces Round 934 (Div. 2) )
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.17 掩码数组:缺失值处理的优雅方案
  • PHP 常用函数2025.02
  • react中如何获取dom元素
  • 【C++】继承(下)
  • C语言实现字符串排序:从代码到原理深度解析
  • Vue3的el-table-column下拉输入实时查询API数据选择的实现方法
  • 【数据结构】_链表经典算法OJ:复杂链表的复制
  • Vue 图片引用方式详解:静态资源与动态路径访问
  • chatGPT写的网页版贪吃蛇小游戏
  • Python量化交易助手:xtquant的安装与应用
  • 前缀和算法
  • Qt常用控件 输入类控件