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,所以我们在进入客户端查看的时候也需要配置时区

客户端配置时区

√ 有设置

× 无设置

相关推荐
java_logo10 小时前
Docker 部署 Dify:轻松搭建 LLM 应用开发平台
运维·docker·容器
方便面不加香菜11 小时前
Docker Container -- 综合实战案例详解
运维·docker·容器
修己xj16 小时前
在 AMD 机器上拉取 ARM 架构 Docker 镜像
docker
瑞克-桑切斯18 小时前
docker Harbor 单机部署手册
大数据·运维·elasticsearch·docker·容器
wzq11_66619 小时前
Kubernetes集群——存储管理
云原生·容器·kubernetes
隔窗听雨眠1 天前
云数仓向PostgreSQL生态延伸的技术动因与工程代价
postgresql·数据库架构·云数仓
Peter-OK2 天前
PostgreSQL学习笔记(入门-进阶-精通说明)
笔记·学习·postgresql
闲云自留地2 天前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
孙克旭_2 天前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
java_logo3 天前
Docker 部署 EmulatorJS:轻松搭建浏览器复古游戏平台
游戏·docker·容器·复古游戏·轩辕镜像·emulatorjs·红白机