首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

十分钟带你入门PostgreSQL数据库开发

  • 25-03-05 12:21
  • 2178
  • 8102
blog.csdn.net

概述

PostgreSQL(大部分情况通常简称postgres)是一个功能强大的开源对象关系数据库系统,PostgreSQL的起源可以追溯到1986年,是加州大学伯克利分校Postgres项目的一部分,在核心平台上拥有超过39年的积极开发经验。PostgresSQL可在所有主要操作系统上运行,自2001年以来一直符合ACID标准。且自 2023 年 9 月版本 16 版本发布以来,PostgreSQL 至少符合 SQL:2023 Core 一致性的 179 个强制性功能中的 170 个(没有任何关系数据库完全符合此标准)。

下面我们来看一下目前PostgreSQL的流行程度,截至到2024年PostgreSQL在关系型数据库中占据了17.2%的市场份额,排名第二,如下图所示:
在这里插入图片描述

我们再来看一下Postgres在github上与Mysql的受欢迎程度

在这里插入图片描述
在这里插入图片描述

可以看出PostgreSQL的Fork数和Star数均小优于Mysql。PostgreSQL相对于Mysql来说也有很多优势所在,例如支持更多的数据类型(地理空间数据类型、JSONB),支持大数据量(可以处理PB级别的数据),接下来我们来看一看PostgreSQL和MySQL的优缺点。

在这里插入图片描述

总上述所,作为一名编程开发人员,有必要学习一下市场占有率排名第二的PostgreSQL,接下来,本文将从零开始带领读者搭建postgresSQL,并创建一个数据库演示在PostgreSQL使用SQL对数据进行存取。

安装PostgreSQL

为了降低安装的复杂性,降低读者学习PostgreSQL入门的门槛,本文将使用Docker容器化技术快速创建一个可以使用的PostgreSQL服务器。

  1. 安装Docker,安装教程可以参考《使用国内源安装docker》

  2. 创建mariadb目录,用于管理docker compose

    jagitch@jagitch-MS-7B93:~$ mkdir postgres && cd postgres
    
    • 1
  3. 生成postgres的默认配置文件

    jagitch@jagitch-MS-7B93:postgres$ docker run -i --rm postgres \
    cat /usr/share/postgresql/postgresql.conf.sample > my-postgres.conf
    
    • 1
    • 2
  4. 创建使用zh_CN.UTF-8的postgres的Dockerfile文件

    jagitch@jagitch-MS-7B93:postgres$ touch Dockerfile
    
    • 1

    Dockerfile文件内容如下:

    FROM postgres
    RUN localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8
    ENV LANG zh_CN.utf8
    
    • 1
    • 2
    • 3
  5. 创建docker-compose.yaml文件

    jagitch@jagitch-MS-7B93:postgres$ touch docker-compose.yaml
    
    • 1
    services:
      db:
        build: .
        restart: always
        container_name: my-postgres
        volumes:
          - ./data:/var/lib/postgresql/data/pgdata
          - ./my-postgres.conf:/etc/postgresql/postgresql.conf
          - /etc/localtime:/etc/localtime:ro
        ports:
          - '5432:5432'
        environment:
          POSTGRES_PASSWORD: "helloworld"
          PGDATA: "/var/lib/postgresql/data/pgdata"
        command: postgres -c config_file=/etc/postgresql/postgresql.conf
      adminer:
        image: adminer
        restart: always
        ports:
          - 8080:8080  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  6. 编译镜像

    jagitch@jagitch-MS-7B93:postgres$ docker compose build
    
    • 1
  7. 启动容器,此时一个PostgreSQL服务器就启动好了

    jagitch@jagitch-MS-7B93:postgres$ docker compose up -d
    
    • 1

使用管理员账号创建数据库

  1. 安装postgres命令行客户端psql

    jagitch@jagitch-MS-7B93:postgres$ sudo apt install postgresql-client
    
    jagitch@jagitch-MS-7B93:postgres$ psql --version
    psql (PostgreSQL) 16.3 (Ubuntu 16.3-0ubuntu0.24.04.1)
    
    • 1
    • 2
    • 3
    • 4
  2. 使用psql连接postgres服务器,postgres默认的超级用户名就是postgres

    jagitch@jagitch-MS-7B93:postgres$ psql -h 127.0.0.1 -p 5432 -U postgres -W
    Password: 
    psql (16.3 (Ubuntu 16.3-0ubuntu0.24.04.1))
    Type "help" for help.
    
    postgres=# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  3. 创建数据库

    postgres=# CREATE DATABASE book_store;
    CREATE DATABASE
    
    • 1
    • 2
  4. 查看postgres服务器所有的数据库

    postgres=# \l
                                                           List of databases
        Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules |   Access privileges   
    ------------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------
     book_store | postgres | UTF8     | libc            | zh_CN.utf8 | zh_CN.utf8 |            |           | 
     postgres   | postgres | UTF8     | libc            | zh_CN.utf8 | zh_CN.utf8 |            |           | 
     template0  | postgres | UTF8     | libc            | zh_CN.utf8 | zh_CN.utf8 |            |           | =c/postgres          +
                |          |          |                 |            |            |            |           | postgres=CTc/postgres
     template1  | postgres | UTF8     | libc            | zh_CN.utf8 | zh_CN.utf8 |            |           | =c/postgres          +
                |          |          |                 |            |            |            |           | postgres=CTc/postgres
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  5. 切换到book_store数据库

    postgres=# \c book_store
    Password: 
    You are now connected to database "book_store" as user "postgres".
    
    • 1
    • 2
    • 3

    需要此登陆到postgres服务器的用户的密码,此处输出超级管理员的密码,docker-compose.yaml中文件中配置的helloworld

  6. 创建数据表

    book_store=# CREATE TABLE b_book(
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    author VARCHAR(50) NOT NULL,
    isbn VARCHAR(30)
    );
    
    CREATE TABLE
    book_store=# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  7. 查看所有表

    book_store=# \dt
             List of relations
     Schema |  Name  | Type  |  Owner   
    --------+--------+-------+----------
     public | b_book | table | postgres
    (1 row)
    
    book_store=# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  8. 查看指定表详情

    book_store=# \d b_book
                                       Table "public.b_book"
     Column |         Type          | Collation | Nullable |              Default               
    --------+-----------------------+-----------+----------+------------------------------------
     id     | integer               |           | not null | nextval('b_book_id_seq'::regclass)
     name   | character varying(50) |           | not null | 
     author | character varying(50) |           | not null | 
     isbn   | character varying(30) |           |          | 
    Indexes:
        "b_book_pkey" PRIMARY KEY, btree (id)
    
    book_store=# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  9. 修改表字段,例如将author字段长度改为100

    book_store=# ALTER TABLE b_book ALTER COLUMN author TYPE varchar(100);
    ALTER TABLE
    
    • 1
    • 2
  10. 添加表字段

    book_store=# ALTER TABLE b_book ADD COLUMN created TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
    ALTER TABLE
    
    book_store=# ALTER TABLE b_book ADD COLUMN remark TEXT;
    ALTER TABLE
    
    • 1
    • 2
    • 3
    • 4
    • 5
  11. 删除表字段

    book_store=# ALTER TABLE b_book DROP COLUMN remark;
    ALTER TABLE
    
    • 1
    • 2
  12. 删除表,先创建表b_test,再删除b_test表

    book_store=# CREATE TABLE b_test(id SERIAL);
    CREATE TABLE
    
    book_store=# DROP TABLE b_test;
    DROP TABLE
    
    • 1
    • 2
    • 3
    • 4
    • 5
  13. 一般创建表,管理表结构都是数据库管理员来操作,我们需要创建一些用户给程序来使用,这避免了给程序使用的账号分配过大的权限,提高安全性。下面以创建一个apple用户为例

    book_store=# create user apple with password 'hello';
    CREATE ROLE
    
    • 1
    • 2

    在PostgreSQL中,可以使用CREATE ROLE或CREATE USER命令来创建一个新用户。CREATE USER实质上是CREATE ROLE的一个包装器,不同之处在于CREATE USER会默认赋予登录权限

  14. 给apple用户分配权限

    book_store=# GRANT SELECT,INSERT,DELETE,UPDATE ON ALL TABLES IN SCHEMA public TO apple;
    GRANT
    
    • 1
    • 2
  15. 给序列分配权限

    GRANT ALL PRIVILEGES ON SEQUENCE b_book_id_seq TO PUBLIC;
    
    • 1

    由于给表b_book添加了一个自增序列,postgres会给这个字段创建一个序列

使用新创建的apple用户进行增删改查

  1. 打开一个终端,登陆mysql

    jagitch@jagitch-MS-7B93:postgres$ psql -h 127.0.0.1 -p 5432 -d book_store -U apple -W
    Password: 
    psql (16.3 (Ubuntu 16.3-0ubuntu0.24.04.1))
    Type "help" for help.
    
    book_store=> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  2. 查询b_book表数据

    book_store=> SELECT * FROM b_book;
     id | name | author | isbn | created 
    ----+------+--------+------+---------
    (0 rows)
    
    • 1
    • 2
    • 3
    • 4

    此时还没有数据

  3. 插入表数据

    book_store=> INSERT INTO b_book(name,author)
         VALUES('红楼梦','曹雪芹');
    INSERT 0 1
    book_store=> INSERT INTO b_book(name,author)
         VALUES('西游记','吴承恩');
    
    book_store=# SELECT * FROM b_book;
     id |  name  | author | isbn |          created           
    ----+--------+--------+------+----------------------------
      1 | 红楼梦 | 曹雪芹 |      | 2024-06-01 14:38:06.347841
      2 | 西游记 | 吴承恩 |      | 2024-06-01 14:38:15.56265
    (2 rows)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    可以发现,数据类型为serial的id字段是可以自增的

  4. 更新表数据

    book_store=> UPDATE b_book set isbn='978-7-0200-0220-7' where name = '红楼梦';
    UPDATE 1
    book_store=> UPDATE b_book set isbn='978-7-0200-0873-5' where name = '西游记';
    UPDATE 1
    
    • 1
    • 2
    • 3
    • 4
  5. 删除表数据

    book_store=> DELETE FROM b_book where name = '红楼梦';
    DELETE 1
    
    
    book_store=# SELECT * FROM b_book;
     id |  name  | author |       isbn        |          created          
    ----+--------+--------+-------------------+---------------------------
      2 | 西游记 | 吴承恩 | 978-7-0200-0873-5 | 2024-06-01 14:38:15.56265
    (1 row)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

总结

本文详细介绍了如何使用Docker安装postgres,并使用psql演示了postgres如何创建数据库、如何创建表、如何创建用户、如何进行权限管理、如何使用新创建的用户对数据表进行增删改查。

推荐阅读

1. 十分钟带你入门mariadb数据库开发

2.【Git从入门到精通】系列课程03:一分钟让你成为开源的一分子/使用github托管我们的代码

3.【Go零基础系列】002:第一个Go程序

4.【Git从入门到精通】系列课程01:git的安装

5. Vs code调试Go程序时怎样查看CPU寄存器的值

6. 搭建Golang在线开发环境(随时随地码代码)

7. 使用VS Code调试Go程序

文章知识点与官方知识档案匹配,可进一步学习相关知识
PostgreSQL技能树SQL高级技巧递归查询7568 人正在系统学习中
注:本文转载自blog.csdn.net的gopyer的文章"https://blog.csdn.net/fuxily/article/details/139380995"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top