postgresql的用户、数据库和表

ops/2025/1/22 22:10:10/

在 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.ppmy.cn/ops/152292.html

相关文章

Node.js接收文件分片数据并进行合并处理

前言:上一篇文章讲了如何进行文件的分片:Vue3使用多线程处理文件分片任务,那么本篇文章主要看一下后端怎么接收前端上传来的分片并进行合并处理。 目录: 一、文件结构二、主要依赖1. express2. multer3. fs (文件系统模块)4. pat…

【springboot集成knife4j】

SpringBoot集成knife4j Knife4j是为Java MVC框架集成Swagger生成API文档的一套增强解决方案,它基于Swagger原有的基础上进行了一些改进和增强,提供了更简洁的UI界面,同时支持更多的自用化配置。下面是在Spring Boot项目中集成Knife4j的基本步…

Qt调用ffmpeg库实现简易视频播放器示例

参考链接 https://blog.csdn.net/nanfeibuyi/article/details/105915235

PyTest自学-认识PyTest

1 PyTest自学-认识PyTest 1.1 PyTest可以用来做什么? PyTest是一个自动化测试框架,支持单元测试和功能测试,有丰富的插件,如,pytest-selemium, pytest-html等。 1.2 安装pytest 使用pip install -U pytest。 1.3 py…

《LT8712X》Type-c转HDMI2.0芯片

一、概述 LT8712X是由Lontium Semiconductor生产的一款高性能混合信号产品,具体型号为LT8712X。它是一款支持Type-C和DP1.2到HDMI2.0以及VGA的转换器,同时支持音频输出。LT8712X旨在将USB Type-C源或DP1.2源连接到HDMI2.0和VGA接收器,适用于…

2025/1/21 学习Vue的第四天

睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候&#xff0c;普通得定义一个对象与属性。 <!DOCTYPE html> <h…

(01)FreeRTOS移植到STM32

一、以STM32的裸机工程模板 任意模板即可 二、去官网上下载FreeRTOS V9.0.0 源码 在移植之前&#xff0c;我们首先要获取到 FreeRTOS 的官方的源码包。这里我们提供两个下载 链 接 &#xff0c; 一 个 是 官 网 &#xff1a; http://www.freertos.org/ &#xff0c; 另…

【Linux】多线程(二)

目录 七、生产者消费者模型7.1 生产者消费者模型的理解7.2 基于BlockingQueue的生产者消费者模型 八、POSIX信号量8.1 信号量的回顾8.2 POSIX信号量的相关接口8.3 基于环形队列的生产消费模型8.3.1 基于环形队列的生产消费模型的原理8.3.2 基于环形队列的生产消费模型的实现 九…