PostgreSQL 的使用介绍

PostgreSQL 是一个功能强大的开源关系型数据库管理系统(RDBMS),以其稳定性、灵活性和对复杂查询的支持而闻名。以下是 PostgreSQL 的使用和关键知识点介绍:


1. 安装和配置

安装
  • Linux :通过包管理器(如 aptyum)安装。

    bash 复制代码
    sudo apt update
    sudo apt install postgresql postgresql-contrib
  • Windows/MacOS :使用 PostgreSQL 官网提供的安装包或工具(如 Homebrew)。

    bash 复制代码
    brew install postgresql
启动与管理
  • 启动服务:

    bash 复制代码
    sudo service postgresql start
  • 登录默认数据库:

    bash 复制代码
    psql -U postgres
  • 创建新数据库:

    sql 复制代码
    CREATE DATABASE mydb;

2. 基础操作

连接数据库
  • 使用 psql 命令行工具:

    bash 复制代码
    psql -U username -d databasename
  • 通过编程语言(如 Python、Java、Node.js)连接,需安装相应驱动程序(如 psycopg2、JDBC)。

常用 SQL 操作
  1. 创建表

    sql 复制代码
    CREATE TABLE users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(100),
        email VARCHAR(150),
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
  2. 插入数据

    sql 复制代码
    INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
  3. 查询数据

    sql 复制代码
    SELECT * FROM users;
  4. 更新数据

    sql 复制代码
    UPDATE users SET email = 'newemail@example.com' WHERE id = 1;
  5. 删除数据

    sql 复制代码
    DELETE FROM users WHERE id = 1;

3. 高级功能

事务和并发控制

PostgreSQL 支持 ACID 事务:

sql 复制代码
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
  • 若中途发生错误,可用 ROLLBACK 撤销事务。
高级查询
  • 窗口函数

    sql 复制代码
    SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank
    FROM employees;
  • CTE(公用表表达式)

    sql 复制代码
    WITH cte AS (
        SELECT id, name FROM users WHERE name LIKE 'A%'
    )
    SELECT * FROM cte;
JSON 支持

PostgreSQL 提供强大的 JSON 和 JSONB 数据类型:

sql 复制代码
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    details JSONB
);

INSERT INTO orders (details) VALUES ('{"product": "Book", "price": 19.99}');
SELECT details->>'product' FROM orders;
全文搜索

支持内置的全文搜索功能:

sql 复制代码
SELECT to_tsvector('The quick brown fox') @@ to_tsquery('quick & fox');

4. 性能优化

  1. 索引

    • 创建索引以提高查询速度:

      sql 复制代码
      CREATE INDEX idx_users_name ON users(name);
    • 支持多种索引类型(B-tree、GIN、GiST、BRIN)。

  2. 分区表

    • 将大表分为多个分区以提高性能:

      sql 复制代码
      CREATE TABLE orders_part (
          id SERIAL,
          order_date DATE NOT NULL
      ) PARTITION BY RANGE (order_date);
  3. 缓存和配置调整

    • 使用 EXPLAIN 分析查询计划:

      sql 复制代码
      EXPLAIN ANALYZE SELECT * FROM users WHERE name = 'Alice';

5. 使用场景

  • Web应用数据库:支持复杂的查询、事务性操作以及扩展性需求。
  • 数据分析:支持 CTE、窗口函数和 JSON 数据处理。
  • 时间序列数据:结合扩展(如 TimescaleDB),支持高效处理时间序列数据。

6. PostgreSQL 的扩展生态

  • PostGIS:用于地理信息系统(GIS)的扩展。
  • TimescaleDB:时间序列数据库扩展。
  • pgAdmin:图形化数据库管理工具。
  • Logical Replication:支持主从复制和逻辑复制。

相关推荐
骇客野人40 分钟前
mysql笛卡尔积怎么形成的怎么避免笛卡尔积
数据库·mysql
m0_564264181 小时前
IDEA DEBUG调试时如何获取 MyBatis-Plus 动态拼接的 SQL?
java·数据库·spring boot·sql·mybatis·debug·mybatis-plus
隐语SecretFlow3 小时前
隐语SecreFlow SCQL 1.0.0b1 发布:更完善的 SQL 支持与更高效的隐私查询引擎
数据库·sql
ttghgfhhjxkl3 小时前
文档搜索引擎搜索模块的索引更新策略:实时增量与全量重建设计
数据库·搜索引擎
老华带你飞3 小时前
机器人信息|基于Springboot的机器人门户展示系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·机器人·论文·毕设·机器人门户展示系统
StarRocks_labs3 小时前
StarRocks 在 Cisco Webex 的探索与实践
数据库·starrocks·json·存算分离·olap 技术栈
notion20253 小时前
Adobe Lightroom Classic下载与安装教程(附安装包) 2025最新版详细图文安装教程
java·数据库·其他·adobe
楚枫默寒4 小时前
mongodb备份脚本(单机+副本集)
数据库
小蒜学长4 小时前
springboot酒店客房管理系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
准时准点睡觉5 小时前
window安装MYSQL5.5出错:a windows service with the name MYSQL alreadyexists....
数据库·windows·mysql