postgresql

安装部署

前期准备工作

  1. 确认系统版本
    离线机器和有网机器需同版本(如都是 CentOS 7 x86_64),避免包版本不兼容:
cat /etc/centos-release  # 输出如:CentOS Linux release 7.9.2009 (Core)
uname -m                # 确认架构:x86_64
  1. 添加 PostgreSQL 官方 YUM 源
    PostgreSQL 官方提供了 yum 源,方便下载对应版本的包(以 14 版本为例):
# 下载PostgreSQL 14的yum源rpm(适用于CentOS 7)
wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 安装源(仅在有网机器上临时安装,用于下载包)
rpm -ivh pgdg-redhat-repo-latest.noarch.rpm
  1. 安装 yum 下载插件(用于仅下载不安装)
# 安装downloadonly插件,支持仅下载rpm包
yum install -y yum-plugin-downloadonly
  1. 下载 PostgreSQL 及所有依赖包
    创建一个目录用于存放下载的 rpm 包(如/pg_pkgs):
mkdir -p /pg_pkgs

# 下载PostgreSQL核心包及依赖(包括服务器、客户端、依赖库等)
# 包说明:
# postgresql14-server:服务器主程序
# postgresql14:客户端工具
# postgresql14-libs:依赖库(其他程序可能依赖)
# 其他依赖会被自动下载(如libicu、openssl等)
yum install -y --downloadonly --downloaddir=/pg_pkgs postgresql14-server postgresql14 postgresql14-libs

离线安装

rpm -ivh *.rpm

初始化并启动 PostgreSQL

# 初始化数据库(CentOS 7中PostgreSQL 14的默认数据目录为/var/lib/pgsql/14/data/)
/usr/pgsql-14/bin/postgresql-14-setup initdb

# 启动服务并设置开机自启
systemctl start postgresql-14
systemctl enable postgresql-14

# 验证状态
systemctl status postgresql-14  # 显示active (running)即为成功


su - postgres
psql
postgres=# SELECT version();

修改配置

find / -name postgresql.conf

cd /opt/pgsql/postgresql/data
vi postgresql.conf

listen_addresses = '*'
port = 5432
max_connections = 100

postrgresql命令

数据库

su - postgres # 进入postgres用户
psql # 进入psql命令行
alter role root with password '123456'; # 修改密码
create database wisedb; # 创建数据库
psql -U root -d wisedb -h 1.1.1.1 # 进入数据库
CREATE TABLE IF NOT EXISTS person ( name VARCHAR(50) NOT NULL, age INT CHECK (age > 0), sex VARCHAR(10) ); # 创建表
INSERT INTO person (name, age, sex) VALUES ('Tom', 18, 'male'), ('Jay', 18, 'male'); # 插入数据
DELETE FROM person WHERE age > 20 AND sex = 'male'; # 删除数据
TRUNCATE TABLE person; # 清空表

删除指定记录:用 DELETE FROM 表名 WHERE 条件;(灵活,支持事务回滚)。
清空全表数据:用 TRUNCATE TABLE 表名;(高效,适合大表,注意自增 ID 重置)。

\d person # 查看表结构
alter table productcvminfo add column timestamp DATE; # 添加字段
alter table productcvminfo add constraint unique_product_timestamp UNIQUE (product, timestamp); # 添加唯一约束,product和timestamp组合唯一
SELTCT product, disk FROM productcvminfo WHERE timestamp >= CURRENT_DATE ORDER BY product # 查询数据

关键文件位置

/var/lib/pgsql/14/data/log/
/var/lib/pgsql/14/data/pg_hba.conf # 用户权限配置文件
/var/lib/pgsql/14/data/postgresql.conf # 主配置文件

python

import psycopg2
from psycopg2 import OperationalError, Error
from datetime import datetime


class MyPGsql:
    def __init__(self, ip, port, password, user):
        self.ip = ip
        self.port = port
        self.password =password
        self.user = user

    def connect_db(self, db):
        """连接到PostgreSQL数据库"""
        conn = None
        try:
            # 连接参数(根据实际环境修改)
            conn = psycopg2.connect(host=self.ip, port=self.port, database=db, user=self.user, password=self.password)
            print("数据库连接成功!")
        except OperationalError as e:
            print(f"连接失败:{e}")
        return conn

    def insert_data(self, conn, pgsql_data, pgsql_sql):
        now = datetime.now()
        day = str(now.date())
        """插入数据(单条+批量)"""
        if not conn:
            return
        # 单条插入
        # single_data = ("Alice", 20, "female")
        # single_sql = "INSERT INTO person (name, age, sex) VALUES (%s, %s, %s);"

        # 批量插入(用户之前提到的Tom和Jay)
        batch_data = [
            ("SZ", 18, 36, 500, day),
            ("SH", 12, 24, 200, day)
        ]
        # batch_sql = "INSERT INTO productcvminfo (product, cpu, memory, disk, timestamp) VALUES (%s, %s, %s, %s, %s);"

        try:
            cur = conn.cursor()
            # 单条插入
            # cur.execute(single_sql, single_data)
            # 批量插入
            cur.executemany(pgsql_sql, pgsql_data)
            # 提交事务
            conn.commit()
            print(f"成功插入 {cur.rowcount} 条数据")  # cur.rowcount返回受影响的行数
        except Error as e:
            print(f"插入失败:{e}")

        finally:
            if cur:
                cur.close()

CPGsql = MyPGsql('10.135.114.14', 5432, '123456', 'postgres')
PG_conn = CPGsql.connect_db('wisedb')
pgsql_sql = "INSERT INTO productcvminfo (product, cpu, memory, disk, timestamp) VALUES (%s, %s, %s, %s, %s);"
CPGsql.insert_data(PG_conn, pgsql_data, pgsql_sql)

posted @ 2025-10-30 09:14  WiseHYH  阅读(50)  评论(0)    收藏  举报