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

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.kler.cn/a/511900.html

相关文章:

  • 【Leetcode 热题 100】70. 爬楼梯
  • 机器学习中的方差与偏差
  • Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅
  • JavaScript--流程控制
  • docker 基础语法学习,K8s基础语法学习,零基础学习
  • 2024年度个人成长与技术洞察总结
  • 内存原理:计算机存储的核心奥秘
  • Python预训练视觉和大语言模型——精彩试读
  • hive表修改字段类型没有级连导致历史分区报错
  • iOS 内购接入StoreKit2 及低与iOS 15 版本StoreKit 1 兼容方案实现
  • 【算法学习笔记】34:扩展欧几里得算法
  • nginx伪静态配置解释和Nginx 常见的配置
  • Unreal Engine 5 C++ Advanced Action RPG 十章笔记
  • Git合并多次提交,改成一个简洁的提交历史
  • K8S中Pod控制器之ReplicaSet(RS)控制器
  • android 开发中遇到的小问题整理
  • Android平台如何采集屏幕数据并推送RTMP服务器实现无纸化同屏?
  • 项目实战--网页五子棋(游戏大厅)(3)
  • 如何使用 Redis 作为高效缓存
  • 在swiper中显示echarts图表,echarts的点击事件无效,图例点击也没有反应
  • Maven 快速上手
  • [2025分类时序异常检测指标R-AUC与VUS]
  • Spring Boot依赖管理:Maven与Gradle实战对比
  • NPM 下载依赖超时:npm ERR! RequestError: connect ETIMEDOUT
  • Tensor 基本操作1 | PyTorch 深度学习实战
  • 【Rust自学】13.9. 使用闭包和迭代器改进IO项目