postgresql
安装部署
前期准备工作
- 确认系统版本
离线机器和有网机器需同版本(如都是 CentOS 7 x86_64),避免包版本不兼容:
cat /etc/centos-release # 输出如:CentOS Linux release 7.9.2009 (Core)
uname -m # 确认架构:x86_64
- 添加 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
- 安装 yum 下载插件(用于仅下载不安装)
# 安装downloadonly插件,支持仅下载rpm包
yum install -y yum-plugin-downloadonly
- 下载 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)

浙公网安备 33010602011771号