参考资料
中文文档
http://www.postgres.cn/docs/current/ddl-identity-columns.html
英文文档
https://www.rockdata.net/tutorial/toc/
资料大全
https://gitcode.com/gh_mirrors/aw/awesome-postgres
PostgreSQL官网下载
PostgreSQL: Downloadshttps://www.postgresql.org/download/
我用homebrew下载安装失败,于是去官网下载安装,官方推荐的是postgres.app


下载可视化工具pgadmin4
配置系统环境变量
psql环境变量
用find /usr -name "psql" 2>/dev/null查找psql位置,发现如下
/Applications/Postgres.app/Contents/Versions/18/bin/psql
打开 ~/.zshrc
输入
export PATH="/Applications/Postgres.app/Contents/Versions/18/bin:$PATH"

最后source ~/.zshrc
导入现有数据
如果有sql文件,可用下方命令导入
psql -U postgres -d 你的数据库名 -f /Users/sin/ballpen.sql;
比如
psql -U postgres -d sin -f /Users/sin/ballpen.sql;
ballpen.sql内容如下
-- =============================================
-- ballpen 表(圆珠笔表)
-- 用于存储圆珠笔产品信息
-- =============================================
-- 创建数据库(如需)
-- CREATE DATABASE ballpen_shop;
-- 切换到目标数据库后执行:
-- \c ballpen_shop
CREATE TABLE IF NOT EXISTS ballpen (
id SERIAL PRIMARY KEY, -- 主键ID
brand VARCHAR(100) NOT NULL, -- 品牌
model VARCHAR(200) NOT NULL, -- 型号
color VARCHAR(50) DEFAULT 'black', -- 笔杆颜色
ink_color VARCHAR(50) DEFAULT 'blue', -- 墨水颜色
tip_size NUMERIC(3,1) NOT NULL CHECK (tip_size > 0), -- 笔尖粗细(mm),如 0.5, 0.7, 1.0
price NUMERIC(10,2) NOT NULL CHECK (price >= 0), -- 价格(元)
stock INTEGER NOT NULL DEFAULT 0 CHECK (stock >= 0), -- 库存数量
description TEXT, -- 商品描述
is_active BOOLEAN DEFAULT TRUE, -- 是否上架
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 更新时间
);
-- 索引
CREATE INDEX IF NOT EXISTS idx_ballpen_brand ON ballpen (brand);
CREATE INDEX IF NOT EXISTS idx_ballpen_tip_size ON ballpen (tip_size);
CREATE INDEX IF NOT EXISTS idx_ballpen_is_active ON ballpen (is_active);
-- 更新时间触发器(自动更新 updated_at)
CREATE OR REPLACE FUNCTION update_ballpen_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS trg_ballpen_updated_at ON ballpen;
CREATE TRIGGER trg_ballpen_updated_at
BEFORE UPDATE ON ballpen
FOR EACH ROW
EXECUTE FUNCTION update_ballpen_timestamp();
-- =============================================
-- 示例数据
-- =============================================
INSERT INTO ballpen (brand, model, color, ink_color, tip_size, price, stock, description) VALUES
('Pilot', 'BL-G2-5', 'black', 'blue', 0.5, 8.50, 100, 'Pilot 百乐 BL-G2-5 按动中性笔 0.5mm'),
('Pilot', 'BL-G2-7', 'black', 'blue', 0.7, 8.50, 80, 'Pilot 百乐 BL-G2-7 按动中性笔 0.7mm'),
('Uni', 'UM-100-05', 'white', 'black', 0.5, 6.00, 200, 'Uni 三菱 UM-100 中性笔 0.5mm'),
('Uni', 'UMN-155', 'black', 'blue', 0.5, 12.00, 50, 'Uni 三菱 UMN-155 按动中性笔 0.5mm'),
('M&G', 'AGPJ5501', 'blue', 'blue', 0.5, 3.50, 500, '晨光 AGPJ5501 按动中性笔 0.5mm'),
('Zebra', 'JJ15', 'black', 'black', 0.5, 7.00, 150, 'Zebra 斑马 JJ15 按动中性笔 0.5mm'),
('Schneider', '805', 'black', 'blue', 0.6, 15.00, 30, 'Schneider 施耐德 805 圆珠笔 0.6mm'),
('Parker', 'IM', 'matte', 'blue', 1.0, 198.00, 10, 'Parker 派克 IM 系列圆珠笔 1.0mm');

默认导入至public,如果想改成别的,比如shop,可以先手动创建shop表
创建shop表
CREATE SCHEMA IF NOT EXISTS shop;
然后把默认表设置为shop
SET search_path TO shop;
导入sql文件
\i /Users/sin/ballpen.sql
