Docker Desktop | 本地化挂载 Postgresql

Docker Desktop | 本地化挂载 Postgresql

挂载

夸克网盘链接:PowerShell,创建postgre

(1) 简单

(2)想自定义的

UTC

CST

在Docker Desktop中查看信息

State

Env

查看信息

版本目录差别

测试

postgresql 复制代码
-- ============================================================
-- seed.sql ------ myapp 测试数据(可重复执行,会先清空重建)
-- ============================================================

DROP TABLE IF EXISTS order_items CASCADE;
DROP TABLE IF EXISTS orders       CASCADE;
DROP TABLE IF EXISTS products     CASCADE;
DROP TABLE IF EXISTS users        CASCADE;

-- 用户表(顺便演示 PG 特色:JSONB 和数组类型)
CREATE TABLE users (
                       id            BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
                       username      VARCHAR(50)   NOT NULL UNIQUE,
                       email         VARCHAR(100)  NOT NULL UNIQUE,
                       password_hash TEXT          NOT NULL,
                       profile       JSONB         NOT NULL DEFAULT '{}',
                       tags          TEXT[]        NOT NULL DEFAULT '{}',
                       is_active     BOOLEAN       NOT NULL DEFAULT TRUE,
                       created_at    timestamp   NOT NULL DEFAULT now()
);

-- 商品表
CREATE TABLE products (
                          id          BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
                          name        VARCHAR(100)  NOT NULL,
                          price       NUMERIC(10,2) NOT NULL CHECK (price >= 0),
                          stock       INT           NOT NULL DEFAULT 0 CHECK (stock >= 0),
                          description TEXT,
                          created_at  TIMESTAMPTZ   NOT NULL DEFAULT now()
);

-- 订单表
CREATE TABLE orders (
                        id         BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
                        user_id    BIGINT        NOT NULL REFERENCES users(id),
                        status     VARCHAR(20)   NOT NULL DEFAULT 'pending'
                            CHECK (status IN ('pending','paid','shipped','completed','cancelled')),
                        total      NUMERIC(12,2) NOT NULL DEFAULT 0,
                        created_at TIMESTAMPTZ   NOT NULL DEFAULT now()
);

-- 订单明细
CREATE TABLE order_items (
                             id         BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
                             order_id   BIGINT        NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
                             product_id BIGINT        NOT NULL REFERENCES products(id),
                             quantity   INT           NOT NULL CHECK (quantity > 0),
                             unit_price NUMERIC(10,2) NOT NULL
);

-- 索引
CREATE INDEX idx_orders_user    ON orders(user_id);
CREATE INDEX idx_orders_status  ON orders(status);
CREATE INDEX idx_items_order    ON order_items(order_id);
CREATE INDEX idx_users_tags     ON users USING GIN (tags);   -- 数组字段的 GIN 索引,MySQL 没有

-- ========== 测试数据 ==========
INSERT INTO users (username, email, password_hash, profile, tags) VALUES
                                                                      ('alice',   'alice@example.com',   'fakehash1', '{"age": 28, "city": "北京"}', ARRAY['vip','early-adopter']),
                                                                      ('bob',     'bob@example.com',     'fakehash2', '{"age": 35, "city": "上海"}', ARRAY['vip']),
                                                                      ('charlie', 'charlie@example.com', 'fakehash3', '{"age": 22, "city": "深圳"}', ARRAY[]::TEXT[]),
                                                                      ('diana',   'diana@example.com',   'fakehash4', '{"age": 31, "city": "广州"}', ARRAY['beta-tester']),
                                                                      ('eve',     'eve@example.com',     'fakehash5', '{"age": 26, "city": "杭州"}', ARRAY['vip']);

INSERT INTO products (name, price, stock, description) VALUES
                                                           ('机械键盘 K870',  399.00, 120, '红轴 87 键'),
                                                           ('无线鼠标 M220',  129.00, 300, '2.4G + 蓝牙双模'),
                                                           ('4K 显示器 27寸', 1899.00,  45, 'IPS 面板'),
                                                           ('USB-C 扩展坞',   249.00,  80, '8 合 1'),
                                                           ('降噪耳机 HC45',  799.00,  60, '主动降噪');

INSERT INTO orders (user_id, status, total) VALUES
                                                (1, 'completed',  528.00),   -- alice: 键盘 + 鼠标
                                                (1, 'pending',    799.00),   -- alice: 耳机
                                                (2, 'paid',      1899.00),   -- bob: 显示器
                                                (3, 'shipped',    258.00),   -- charlie: 鼠标 x2
                                                (4, 'cancelled',  129.00),   -- diana: 鼠标(已取消)
                                                (5, 'paid',      1047.00);   -- eve: 键盘x2 + 扩展坞

INSERT INTO order_items (order_id, product_id, quantity, unit_price) VALUES
                                                                         (1, 1, 1, 399.00),
                                                                         (1, 2, 1, 129.00),
                                                                         (2, 5, 1, 799.00),
                                                                         (3, 3, 1, 1899.00),
                                                                         (4, 2, 2, 129.00),
                                                                         (5, 2, 1, 129.00),
                                                                         (6, 1, 2, 399.00),
                                                                         (6, 4, 1, 249.00);

-- ========== 验证查询 ==========
-- 每个用户的订单数和实际消费(排除已取消)
SELECT u.username,
       COUNT(o.id)                    AS order_count,
       COALESCE(SUM(o.total), 0)      AS total_spent
FROM users u
         LEFT JOIN orders o ON o.user_id = u.id AND o.status <> 'cancelled'
GROUP BY u.id, u.username
ORDER BY total_spent DESC;

-- 卖得最好的商品
SELECT p.name, SUM(i.quantity) AS sold
FROM order_items i
         JOIN products p ON p.id = i.product_id
GROUP BY p.id, p.name
ORDER BY sold DESC;

由于UTC,所以我们在进入客户端查看的时候也需要配置时区

客户端配置时区

√ 有设置

× 无设置

相关推荐
瀚高PG实验室6 小时前
瀚高数据库常用系统表查询入门指南(附常用SQL)
数据库·sql·postgresql·瀚高数据库
JavaPub-rodert6 小时前
Docker 日志为什么能把磁盘写爆?讲透 json-file、local、journald、日志轮转与 docker logs
docker·eureka·json
人生匆匆7 小时前
docker部署ceph集群
ceph·docker·容器
像风一样自由20209 小时前
56.实战PostgreSQL-pgvector-FastAPI构建轻量级RAG
数据库·人工智能·postgresql·大模型·fastapi·智能体
张张123y10 小时前
后端第九课:部署上线(把你的 FastAPI 后端真正跑起来给别人用)
python·docker·部署·fastapi
AscendKing13 小时前
Docker Compose 一键部署 SkyWalking 10.2.0 + Elasticsearch8.11,分布式链路追踪完整实战
elasticsearch·docker·skywalking·链路追踪·微服务监控
励志师code14 小时前
Kubernetes 集群节点生命周期管理实战:从扩容、调度管控到证书续期
运维·docker·容器·kubernetes·gpu算力·kubelet
ss27314 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 11 PostgreSQL安装部署常见问题排查与解决
数据库·笔记·postgresql
闲云自留地15 小时前
Kubernetes 安装保姆级:关 swap、装 containerd、init 集群、calico 一篇通
容器·贪心算法·kubernetes
木雷坞15 小时前
Docker Compose部署Metabase:应用库隔离与日期筛选看板
运维·docker·容器