数据库-Postgresql的基础知识和常见应用

Postgresql的基础知识和常见应用

  • Postgresql的基础知识和常见应用
    • Postgresql简介
    • Postgresql安装
    • Postgresql使用

Postgresql的基础知识和常见应用

Postgresql简介

PostgreSQL是一种开源关系型数据库管理系统(RDBMS),它是一个强大、可扩展、高可靠性和安全性的数据库系统。下面是一些关于PostgreSQL的详细信息:

  • 历史:
    PostgreSQL最初由Michael Stonebraker和他的同事们于1986年在加州大学伯克利分校开发。
    最初的名称是Postgres,后来改为PostgreSQL。
    PostgreSQL的第一个稳定版本发布于1995年。
    从那以后,PostgreSQL的开发者社区不断增长,代码库不断扩展,现在拥有数百个开发者和数千个贡献者。
  • 版本:
    PostgreSQL发布了许多版本,每个版本都有一些新的功能和改进。
    当前版本是13.5(截至2023年3月1日),它包含了许多新功能,如空间索引和分区增强等。
    PostgreSQL还提供了许多旧版本的支持,以确保现有应用程序的兼容性。
  • 生态:
    PostgreSQL拥有一个活跃的社区,提供了许多第三方工具和插件,帮助用户更好地使用和管理PostgreSQL数据库。
    PostgreSQL还提供了许多扩展,如PostGIS(空间数据管理)和pgAdmin(图形化管理工具)等,这些扩展使得PostgreSQL更加适合用于各种用途,例如地理信息系统、数据分析和Web应用程序。
    PostgreSQL的生态系统也包括了许多商业公司和服务提供商,这些公司提供了各种支持、咨询和培训服务,以满足企业和组织的需求。

Postgresql安装

  • 在centos7上安装脚本
#!/bin/bash

# 安装PostgreSQL的yum存储库
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 安装PostgreSQL服务器和客户端
sudo yum install -y postgresql-server postgresql-contrib postgresql-devel

# 初始化数据库并启动服务
sudo postgresql-setup initdb
sudo systemctl start postgresql
sudo systemctl enable postgresql

# 设置PostgreSQL用户密码
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'your_password_here';"

# 允许远程连接
sudo sed -i "s/host    all             all             127.0.0.1\/32            ident/host    all             all             0.0.0.0\/0               md5/g" /var/lib/pgsql/data/pg_hba.conf
# 重启PostgreSQL服务
sudo systemctl restart postgresql
# 验证安装
sudo -u postgres psql -c "\l"
sudo -u postgres psql -c "\du"
echo "PostgreSQL installed successfully."

#!/bin/bash
# Add PostgreSQL 14 yum repo
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Install PostgreSQL 14
sudo yum install -y postgresql14-server postgresql14-contrib
# Initialize PostgreSQL database
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
# Start PostgreSQL service
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14
# Install PostGIS
sudo yum install -y epel-release
sudo yum install -y postgis30_14
# Create PostgreSQL database and user
sudo -u postgres psql -c "CREATE DATABASE mydb;"
sudo -u postgres psql -c "CREATE USER myuser WITH PASSWORD 'mypassword';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;"
# Enable PostGIS extension in database
sudo -u postgres psql mydb -c "CREATE EXTENSION postgis;"
  • Postgresql开启外部访问
#!/bin/bash

# 修改pg_hba.conf文件
sudo sed -i "s/host    all             all             127.0.0.1\/32            ident/host    all             all             0.0.0.0\/0               md5/g" /var/lib/pgsql/data/pg_hba.conf

# 修改postgresql.conf文件
sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /var/lib/pgsql/data/postgresql.conf

# 重启PostgreSQL服务
sudo systemctl restart postgresql

echo "External access enabled successfully."

  • 数据和配置目录及修改
默认数据目录是 /var/lib/pgsql/data
默认配置目录是 /var/lib/pgsql

#命令查看PostgreSQL的数据目录和配置目录
psql -c "show data_directory"
psql -c "show config_file"
  • docker安装
#!/bin/bash

# 安装最新版PostgreSQL Docker镜像
docker pull postgres:latest

# 创建本地数据目录和配置目录
mkdir -p /home/user/postgres/data
mkdir -p /home/user/postgres/config

# 启动PostgreSQL容器并挂载本地数据目录和配置目录
docker run --name postgres \
-e POSTGRES_PASSWORD=123456 \
-d \
-p 5432:5432 \
-v /home/user/postgres/data:/var/lib/postgresql/data \
-v /home/user/postgres/config:/etc/postgresql \
postgres:latest

echo "PostgreSQL installed successfully."
  • 启停脚本
# 启动PostgreSQL服务
systemctl start postgresql
# 停止PostgreSQL服务
systemctl stop postgresql
# 重启PostgreSQL服务
systemctl restart postgresql

Postgresql使用

  • 内置的命令
pg_config:用于显示PostgreSQL的编译选项和安装路径的命令。可以使用pg_config命令来确定PostgreSQL的安装路径、库路径、头文件路径、版本号、编译选项等信息。
pg_ctlcluster:用于管理PostgreSQL集群的命令。可以使用pg_ctlcluster命令启动、停止、重启、重载和监视PostgreSQL集群进程。还可以使用pg_ctlcluster命令进行集群配置和管理。
pg_upgrade:用于升级PostgreSQL数据库的命令行工具。可以使用pg_upgrade命令将现有的PostgreSQL数据库升级到新版本。
pg_resetxlog:用于重置PostgreSQL服务器WAL日志的命令行工具。可以使用pg_resetxlog命令将WAL日志归零,并在需要时对数据库进行恢复。
pg_rewind:用于将已复制的PostgreSQL服务器重置为主服务器的命令行工具。可以使用pg_rewind命令将从PostgreSQL服务器进行复制的备库重置为主服务器,以便进行故障转移和恢复。
pg_standby:用于将PostgreSQL服务器设置为备库的命令行工具。可以使用pg_standby命令将PostgreSQL服务器设置为备库,以便进行故障转移和恢复。
  • 内置命令
# 登录
psql -h hostname -p port -U username -d databasename

# \内置命令
\q:退出psql命令行界面。
\c:连接到一个新的数据库。例如,使用\c dbname命令连接到名为dbname的数据库。
\d:列出所有关系(表、视图、索引等)。
\dt:列出所有表。
\dv:列出所有视图。
\di:列出所有索引。
\df:列出所有函数。
\du:列出所有用户。
\dp:列出所有表的权限。
\i:从文件中读取和执行SQL语句。例如,使用\i /path/to/file命令从文件中执行SQL语句。
\e:编辑当前命令行缓冲区中的SQL语句。例如,使用\e命令可以在外部文本编辑器中编辑SQL语句。
\timing:启用或禁用SQL语句的执行时间跟踪。例如,使用\timing on命令启用SQL语句的执行时间跟踪。
\h:显示psql命令的帮助信息。例如,使用\h命令可以显示所有可用的psql命令。

  • postgis
GiST索引:一种通用的空间索引,支持点、线、多边形等空间数据类型。
SP-GiST索引:一种基于GiST的空间索引改进,可以处理更复杂的空间数据类型,例如多面体和多层数据。
BRIN索引:一种块范围索引,用于高效存储和查询大型数据集。
R-tree索引:一种常用的空间索引,支持点、线、多边形等空间数据类型。
Kd树索引:一种用于高维空间数据的索引,可以加速最近邻查询。
B-tree索引:一种基于排序的索引,用于加速范围查询和精确匹配查询。
Hash索引:一种基于哈希的索引,用于加速等值查询。
GIN索引:一种通用的倒排索引,用于加速包含某个值的行的查询。
GiN索引:一种用于加速文本搜索的倒排索引。
SP-GiST三角形索引:一种基于SP-GiST的空间索引改进,用于处理三角形数据。
R树索引:一种常用的空间索引,支持点、线、多边形等空间数据类型。

#!/bin/bash
# 添加PostGIS扩展到mydb数据库中
sudo -u postgres psql -d mydb -c "CREATE EXTENSION postgis;"
# (可选)添加其他PostGIS扩展到mydb数据库中
# sudo -u postgres psql -d mydb -c "CREATE EXTENSION postgis_topology;"
# sudo -u postgres psql -d mydb -c "CREATE EXTENSION fuzzystrmatch;"
# ...
echo "PostGIS initialization complete."

#!/bin/bash
# 创建名为mytable的新表,并在其中添加名为geom的空间列
sudo -u postgres psql -d mydb -c "CREATE TABLE mytable (id serial primary key, name varchar(50), geom geometry(Point, 4326));"
# 在mytable表中插入一些空间数据
sudo -u postgres psql -d mydb -c "INSERT INTO mytable (name, geom) VALUES ('Point 1', ST_SetSRID(ST_MakePoint(-122.42, 37.78), 4326));"
sudo -u postgres psql -d mydb -c "INSERT INTO mytable (name, geom) VALUES ('Point 2', ST_SetSRID(ST_MakePoint(-122.41, 37.79), 4326));"
sudo -u postgres psql -d mydb -c "INSERT INTO mytable (name, geom) VALUES ('Point 3', ST_SetSRID(ST_MakePoint(-122.40, 37.80), 4326));"
echo "PostGIS table creation and data insertion complete."

# 验证
sudo -u postgres psql -d mydb -c "SELECT PostGIS_Version();"
  • 创建表和多分区
# 创建主表
CREATE TABLE orders (
   order_id serial PRIMARY KEY,
   order_date date NOT NULL,
   customer_name varchar(50) NOT NULL,
   total_amount numeric(15, 2) NOT NULL
);

# 创建分区表
CREATE TABLE orders_2019 (
   CHECK (order_date >= DATE '2019-01-01' AND order_date < DATE '2020-01-01')
) INHERITS (orders);

CREATE TABLE orders_2020 (
   CHECK (order_date >= DATE '2020-01-01' AND order_date < DATE '2021-01-01')
) INHERITS (orders);

# 插入数据
INSERT INTO orders_2019 (order_date, customer_name, total_amount)
VALUES ('2019-01-01', 'Alice', 100.00),
       ('2019-02-01', 'Bob', 200.00),
       ('2019-03-01', 'Charlie', 300.00);

INSERT INTO orders_2020 (order_date, customer_name, total_amount)
VALUES ('2020-01-01', 'David', 150.00),
       ('2020-02-01', 'Emily', 250.00),
       ('2020-03-01', 'Frank', 350.00);

# 查询数据
SELECT * FROM orders WHERE order_date >= DATE '2019-01-01' AND order_date < DATE '2021-01-01';

SELECT * FROM orders_2019;
SELECT * FROM orders_2020;
  • 使用JPA连接Postgresql

你可能感兴趣的:(数据库,服务器,postgresql)