PostgreSQL是一种开源关系型数据库管理系统(RDBMS),它是一个强大、可扩展、高可靠性和安全性的数据库系统。下面是一些关于PostgreSQL的详细信息:
#!/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;"
#!/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"
#!/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
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命令。
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;