【数据库】--PostgreSQL 详细安装教程

目录

1.PostgreSQL--简介

2.PostgreSQL--安装

3.PostgreSQL--可视化工具

4.PostgreSQL--python连接


1.PostgreSQL--简介

PostgreSQL (常简称为 Postgres )是一个功能强大、开源、对象-关系型数据库管理系统 (ORDBMS),以稳定性、可扩展性、标准兼容性和数据完整性 著称。它诞生于 1986 年的加州大学伯克利分校(UC Berkeley)的 POSTGRES 项目,是目前世界上最先进的开源数据库之一。

官网:https://www.postgresql.org/

开源协议:PostgreSQL License(类似 MIT/BSD,非常宽松)


🔑 核心特性

  1. 完全开源 & 社区驱动
  • 无商业公司控制,由全球开发者社区维护。

  • 代码透明,可自由使用、修改、分发(包括商用)。

  1. 高度兼容 SQL 标准
  • 支持 SQL:2016 大部分核心特性,在多个权威评测中 SQL 兼容性得分最高。

  • 支持复杂查询、窗口函数、CTE(公共表表达式)、递归查询等。

  1. 强大的数据类型支持
  • 基础类型:整数、浮点、字符串、日期时间等

  • 高级类型:

    • JSON / JSONB(高效存储与查询)

    • 数组(Array)

    • 范围类型(Range)

    • 几何类型(Point, Line, Polygon)

    • 自定义复合类型

    • UUID、INET(IP 地址)、CIDR 等

  1. 可扩展性极强
  • 支持自定义函数(用 SQL、PL/pgSQL、Python、C、Java 等编写)

  • 支持扩展插件(Extensions):

    • postgis:地理空间数据处理(GIS)

    • pg_trgm:模糊搜索与相似度匹配

    • hstore:键值对存储

    • timescaledb:时序数据优化

    • citus:分布式扩展(由微软收购)

2.PostgreSQL--安装

下载官网:EDB:开源企业 Postgres 数据库管理

安装教程文档:https://www.enterprisedb.com/docs/supported-open-source/postgresql/installing/windows/

根据操作系统选择支持的版本:

1.安装

选择简体中文,然后next就好了

取消勾选Stack Builder,然后点击Finish关闭窗口。

最后,添加到环境变量:

验证一下:

bash 复制代码
psql --version

3.PostgreSQL--可视化工具

pgAdmin官网下载:下载

pgAdminPostgreSQL 官方推荐的开源图形化管理工具(GUI),用于可视化地管理 PostgreSQL 数据库服务器。它功能强大、跨平台、免费,是 PostgreSQL 用户最常用的数据库客户端之一。

  • 全称:pgAdmin
  • 官网https://www.pgadmin.org/
  • 开源协议:PostgreSQL License(非常宽松,可免费用于商业用途)
  • 支持平台:Windows、macOS、Linux
  • 最新版本 :截至 2026 年,主流使用的是 pgAdmin 4(基于 Web 技术重构)

下载需要的版本:

安装程序包:

点击安装:

设置中文:

连接到 PostgreSQL 数据库服务器,双击Servers 输入安装数据库时的密码进行连接。

  • Host : localhost(本地)或服务器 IP。

  • Port : 5432(默认端口)。

  • Username : postgres(默认超级用户)。

  • Password: 安装 PostgreSQL 时设置的密码。

创建表:

sql 复制代码
-- 1. 用户表(users)
CREATE TABLE users (
    user_id SERIAL PRIMARY KEY,
    username VARCHAR(100) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    role VARCHAR(20) NOT NULL CHECK (role IN ('admin', 'annotator', 'uploader', 'viewer'))
);

-- 2. 图片表(picture)
CREATE TABLE picture (
    picture_id SERIAL PRIMARY KEY,
    filename VARCHAR(255),
    uploader_id INT NOT NULL,
    upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    status SMALLINT NOT NULL DEFAULT 0,
    FOREIGN KEY (uploader_id) REFERENCES users(user_id)
);

-- 3. AI 标注表(ai_annotation)
CREATE TABLE ai_annotation (
    ai_annotation_id SERIAL PRIMARY KEY,
    picture_id INT NOT NULL,
    model_version VARCHAR(50) NOT NULL,
    annotation_data JSON NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (picture_id) REFERENCES picture(picture_id)
);

-- 4. 人工标注表(manual_annotation)
CREATE TABLE manual_annotation (
    manual_annotation_id SERIAL PRIMARY KEY,
    picture_id INT NOT NULL,
    annotator_id INT NOT NULL,
    label JSON NOT NULL,
    subimage_name VARCHAR(255) NOT NULL,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (picture_id) REFERENCES picture(picture_id),
    FOREIGN KEY (annotator_id) REFERENCES users(user_id)
);

-- 5. 完整标注表(complete_annotation)
CREATE TABLE complete_annotation (
    complete_annotation_id SERIAL PRIMARY KEY,
    picture_id INT NOT NULL UNIQUE,
    final_data JSON NOT NULL,
    created_by INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (picture_id) REFERENCES picture(picture_id),
    FOREIGN KEY (created_by) REFERENCES users(user_id)
);

-- 添加列注释(PostgreSQL 方式)
COMMENT ON COLUMN picture.status IS '0-待标注, 1-已标注等';
COMMENT ON COLUMN manual_annotation.label IS '地质类别标签,如 {"type": "fault", "confidence": 0.95}';

执行查询语句,查看表

4.PostgreSQL--python连接

首先安装相关的数据包

bash 复制代码
 pip install psycopg2

然后连接:

python 复制代码
#导入依赖包
#!/usr/bin/python3
 
import psycopg2
 
#创建连接对象
conn=psycopg2.connect(database="postgres",user="postgres",password="123456",host="localhost",port="5432")
cur=conn.cursor() #创建指针对象
 
# 创建表
cur.execute("CREATE TABLE student(id integer,name varchar,sex varchar);")
 
#插入数据
cur.execute("INSERT INTO student(id,name,sex)VALUES(%s,%s,%s)",(1,'Aspirin','M'))
cur.execute("INSERT INTO student(id,name,sex)VALUES(%s,%s,%s)",(2,'Taxol','F'))
cur.execute("INSERT INTO student(id,name,sex)VALUES(%s,%s,%s)",(3,'Dixheral','M'))
 
# 获取结果
cur.execute('SELECT * FROM student')
results=cur.fetchall()
print (results)
 
# 关闭练级
conn.commit()
cur.close()
conn.close()
相关推荐
数据库小组4 小时前
2026 年,MySQL 到 SelectDB 同步为何更关注实时、可观测与可校验?
数据库·mysql·数据库管理工具·数据同步·ninedata·selectdb·迁移工具
华科易迅4 小时前
MybatisPlus增删改查操作
android·java·数据库
Kethy__4 小时前
计算机中级-数据库系统工程师-计算机体系结构与存储系统
大数据·数据库·数据库系统工程师·计算机中级
SHoM SSER4 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
熬夜的咕噜猫5 小时前
MySQL备份与恢复
数据库·oracle
jnrjian5 小时前
recover database using backup controlfile until cancel 假recover,真一致
数据库·oracle
lifewange5 小时前
java连接Mysql数据库
java·数据库·mysql
大妮哟6 小时前
postgresql数据库日志量异常原因排查
数据库·postgresql·oracle
还是做不到嘛\.7 小时前
Dvwa靶场-SQL Injection (Blind)-基于sqlmap
数据库·sql·web安全
不写八个7 小时前
PHP教程004:php链接mysql数据库
数据库·mysql·php