数据库安装postgresql
阅读原文时间:2023年09月07日阅读:6

数据库安装postgresql

目录

1.1 安装最新版psql

1.检查当前已安装的PostgreSQL版本:
yum list installed | grep postgresql
2.确定要安装的新版本。您可以在PostgreSQL的官方网站或存储库中找到可用的版本信息。
3.移除旧版本的PostgreSQL:
yum remove postgresql-server
4.添加新版本的PostgreSQL存储库。根据您的操作系统和所选的PostgreSQL版本,可能会有不同的存储库和命令。下面是一个示例命令,用于添加官方的PostgreSQL存储库(以CentOS 7为例):
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
5.更新yum缓存:
yum makecache
6.安装新版本的PostgreSQL:
yum install -y postgresql-server
7.初始化和配置新安装的PostgreSQL:
/usr/bin/postgresql-setup initdb
8.启动PostgreSQL服务:
systemctl start postgresql
9.确保PostgreSQL服务在系统启动时自动启动:
systemctl enable postgresql


#找到初始化目录
find / -name "postgresql-setup"
/usr/bin/postgresql-setup  initdb
#启动安装  设置开机自启动
 systemctl start  postgresql.service
 systemctl enable  postgresql.service
systemctl status postgresql


一定要关闭防火墙systemctl disabled firewalld.service
或者设置防火墙规则 5432


登录数据库:su postgres //切换账号
然后输入psql
登陆成功!可进行数据库的操作
查看有哪些数据库:\l
退出数据库:\q
切换到root 用户:su root 密码:Admin123@
#### 172.30.3.11/172.30.3.18 数据库 用户 :esg 密码:esg1346852
# 导出数据库的表成CSV格式的文件;导出来字符有问题可以用notepad++转换
psql -h 172.30.3.11 -p 5432 -d esg -U esg -c "\copy company_pollution_clean to './company_pollution_clean.csv' WITH csv header delimiter ',' encoding 'UTF8'";

pg_dump -h 172.30.3.11 -p 5432 -U esg -t news -f news.sql esg
-U 用户名 -t 表名 最后 库名 -f 导出的文件

1.基本命令:
createdb 创建一个新的PostgreSQL的数据库(命令可以使用大写)
createuser 创建一个新的PostgreSQL的用户
dropdb 删除数据库
dropuser 删除用户
pg_dump 将PostgreSQL数据库导出到一个脚本文件
pg_dumpall 将所有的PostgreSQL数据库导出到一个脚本文件
pg_restore 从一个由pg_dump或pg_dumpall程序导出的脚本文件中恢复PostgreSQL数据库
psql 一个基于命令行的PostgreSQL交互式客户端程序
vacuumdb 清理和分析一个PostgreSQL数据库,它是客户端程序psql环境下SQL语句VACUUM的shell脚本封装,二者功能完全相同

2. 数据库中的命令:
template1=# \l 查看系统中现存的数据库
template1=# \q 退出客户端程序psql
template1=# \dt 查看表
template1=# \d 查看表结构
template1=# \di 查看索引
template1=# \c 从一个数据库中转到另一个数据库中,如template1=# \c sales 从template1转到sales

3.基本数据库操作
创建数据库: create database [数据库名];
查看数据库列表: \d
删除数据库: . drop database [数据库名];
创建表: create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;);
查看表名列表: \d
查看某个表的状况: \d [表名]
重命名表: alter table [表名A] rename to [表名B];
删除表: drop table [表名]; 

4. 表内基本操作
在已有的表里添加字段: alter table [表名] add column [字段名] [类型];
删除表中的字段: alter table [表名] drop column [字段名];
去除缺省值: alter table [表名] alter column [字段名] drop default;
在表中插入数据: insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);
重命名一个字段: alter table [表名] rename column [字段名A] to [字段名B];
给一个字段设置缺省值: alter table [表名] alter column [字段名] set default [新的默认值];
修改表中的某行某列的数据: update [表名] set [目标字段名]=[目标值] where [该行特征];
删除表中某行数据: delete from [表名] where [该行特征];

delete from [表名];--删空整个表
5. 备份数据库
可以使用pg_dump和pg_dumpall来完成。比如备份sales数据库:
pg_dump sales>/home/pgsql/backup/myback.bak

一、常用命令

登录命令:

psql -h IP -p 端口 -U 用户名 -d 数据库名 -W
\? 所有命令帮助
\l 列出所有数据库
\d 列出数据库中所有表
\dt 列出数据库中所有表
\d [table_name] 显示指定表的结构
\di 列出数据库中所有 index
\dv 列出数据库中所有 view
\h sql命令帮助
\q 退出连接
\c [database_name] 切换到指定的数据库
\c 显示当前数据库名称和用户
\conninfo 显示客户端的连接信息
\du 显示所有用户
\dn 显示数据库中的schema
\encoding 显示字符集
select version(); 显示版本信息
\i testdb.sql 执行sql文件
\x 扩展展示结果信息,相当于MySQL的\G
\o /tmp/test.txt 将下一条sql执行结果导入文件中

二、用户

2.1 创建账号
创建用户:
create user 用户名 password '密码';
create user model password 'model147258';
设置只读权限:
alter user 用户名 set default_transaction_read_only = on;

创建数据库:
CREATE DATABASE 数据库;
CREATE DATABASE model;
设置可操作的数据库:
grant all on database 数据库名 to 用户名;
grant all on database model to model;
授权可操作的模式和权限:
-- 授权
grant select on all tables in schema public to 用户名;

-- 授权
GRANT ALL ON TABLE public.user TO mydata;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.user TO mydata_dml;
GRANT SELECT ON TABLE public.user TO mydata_qry;

2.2 删除账号
撤回在public模式下的权限:
revoke select on all tables in schema public from 用户名;

撤回在information_schema模式下的权限:
revoke select on all tables in schema information_schema from 用户名;

撤回在pg_catalog模式下的权限:
revoke select on all tables in schema pg_catalog from 用户名;

撤回对数据库的操作权限:
revoke all on database 数据库名 from 用户名;

删除用户:
drop user 用户名;

三、权限

3.1 授权
设置只读权限:
alter user 用户名 set default_transaction_read_only = on;

设置可操作的数据库:
grant all on database 数据库名 to 用户名;

设置可操作的模式和权限:
grant select,insert,update,delete on all tables in schema public to 用户名;

2.2 撤回权限
撤回在public模式下的权限:
revoke select on all tables in schema public from 用户名;

撤回在information_schema模式下的权限:
revoke select on all tables in schema information_schema from 用户名;

撤回在pg_catalog模式下的权限:
revoke select on all tables in schema pg_catalog from 用户名;

撤回对数据库的操作权限:
revoke all on database 数据库名 from 用户名;

四、模式 Schema

创建和当前用户同名模式(schema):
注意:用户名与 schema 同名,且用户具有访问改 schema 的权限,用户连入数据库时,默认即为当前 schema。

create schema AUTHORIZATION CURRENT_USER;
自定义创建模式(schema):

create schema 模式名称;
注意:如果不创建scheme,并且语句中不写scheme,则默认scheme使用内置的public

查看数据库下的所有(schema):
select * from information_schema.schemata;

五、数据库

查询所有数据库:
select datname from pg_database;

创建数据库:
create database 数据库名 owner 所属用户 encoding UTF8;
create database model owner model encoding UTF8;
注意:创建完数据库,需要切换到数据库下,创建和当前用户同名scheme,删除数据库后schema也会一并删除:

-- 重新登陆到新数据库下,执行如下语句
create schema AUTHORIZATION CURRENT_USER;
删除数据库:
drop database 数据库名;
注意:删库前需要关闭所有会话,不然会提示:
ERROR:  database "mydb" is being accessed by other users
DETAIL:  There are 8 other sessions using the database.

关闭数据库所有会话:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname='mydb' AND pid<>pg_backend_pid();

六、表

查询schema中所有表:
select table_name from information_schema.tables where table_schema = 'myuser';
创建表:
CREATE TABLE public.t_user (
  "id" BIGSERIAL NOT NULL,
  "username" VARCHAR(64) NOT NULL,
  "password" VARCHAR(64) NOT NULL,
  "create_time" TIMESTAMP(0) default CURRENT_TIMESTAMP not null,
  "update_time" TIMESTAMP(0) default CURRENT_TIMESTAMP not null
);
COMMENT ON TABLE public.t_user IS '用户表';
COMMENT ON COLUMN public.t_user.id IS '主键';
COMMENT ON COLUMN public.t_user.username IS '用户名';
COMMENT ON COLUMN public.t_user.password IS '密码';
COMMENT ON COLUMN public.t_user.create_time IS '创建时间';
COMMENT ON COLUMN public.t_user.update_time IS '更新时间';
-- 注释
-- 创建自增序列
alter sequence "t_user_ID_seq" restart with 1 increment by 1;
-- 创建主键序列
drop index if exists "t_user_pkey";
alter table "t_user" add constraint "t_user_pkey" primary key ("ID");

根据已有表结构创建表:
create table if not exists 新表 (like 旧表 including indexes including comments including defaults);
删除表:
drop table if exists "t_template" cascade;

查询注释:
SELECT
a.attname as "字段名",
col_description(a.attrelid,a.attnum) as "注释",
concat_ws('',t.typname,SUBSTRING(format_type(a.atttypid,a.atttypmod) from '(.*)')) as "字段类型"
FROM
pg_class as c,
pg_attribute as a,
pg_type as t
WHERE
c.relname = 't_batch_task'
and a.atttypid = t.oid
and a.attrelid = c.oid
and a.attnum>0;

七、索引

创建索引:
drop index if exists t_user_username;
create index t_user_username on t_user (username);

创建唯一索引:
drop index if exists t_user_username;
create index t_user_username on t_user (username);

八、查询SQL

注意:PostgreSQL中的字段大小写敏感,而且只认小写字母,查询时需注意。

其他与基本sql大致相同。

8.1 to_timestamp() 字符串转时间
select * from t_user
where create_time >= to_timestamp('2023-01-01 00:00:00', 'yyyy-mm-dd hh24:MI:SS');

8.2 to_char 时间转字符串
select to_char(create_time, 'yyyy-mm-dd hh24:MI:SS') from t_user;

8.3 时间加减
-- 当前时间加一天
SELECT NOW()::TIMESTAMP + '1 day';
SELECT NOW() + INTERVAL '1 DAY';
SELECT now()::timestamp + ('1' || ' day')::interval
-- 当前时间减一天
SELECT NOW()::TIMESTAMP + '-1 day';
SELECT NOW() - INTERVAL '1 DAY';
SELECT now()::timestamp - ('1' || ' day')::interval
-- 加1年1月1天1时1分1秒
select NOW()::timestamp + '1 year 1 month 1 day 1 hour 1 min 1 sec';

8.4 like模糊查询
SELECT * FROM 表名 WHERE 字段 LIKE ('%关键字%');

九、执行sql脚本

方式一:先登录再执行
\i testdb.sql

方式二:通过psql执行
psql -d testdb -U postgres -f /pathA/xxx.sql

十、导出数据到SQL文件

pg_dump -h localhost -p 5432 -U postgres --column-inserts -t table_name -f save_sql.sql database_name

--column-inserts 以带有列名的 INSERT 命令形式转储数据。
-t 只转储指定名称的表。
-f 指定输出文件或目录名。

十一、postgresql之pg_dump命令详解

pg_dump用于提取 PostgreSQL数据库到一个脚本文件或其他的存档文件

用法:

pg_dump [connection-option...] [option...] [dbname]
描述:

pg_dump用于备份postgresql数据库,它可以在数据库运行时使用,pg_dump不会阻塞其他的用户访问数据库。

转储的内容可以脚本或存档的方式输出。脚本转储指包含SQL命令的纯文本文件,这些 SQL 命令可以用于重建该数据库并将之恢复到保存成脚本的时候的状态。要从这些脚本中恢复数,需要使用psql命令。脚本文件可以被用来重建数据库。

另一种归档文件格式必须和pg_restore一起使用重建数据库。它们允许pg_restore有选择地进行恢复,甚至在恢复前重新排列项目。归档文件格式被设计成跨平台移植。

当一种归档文件格式与pg_restore结合使用,那么pg_dump就能提供一种灵活的归档和传输机制。 pg_dump可以用于备份整个数据库,然后就可以使用pg_restore检查这个归档和/或选择要恢复的数据库部分。最灵活的输出文件格式是“自定义”格式(-Fc)。它允许选择和重新排序的所有归档的项目,在默认情况下被压缩。
在运行pg_dump的时候,你应该检查任何警告的输出(在标准错误上打印)。
Options
下面的命令行选项控制内容及格式输出。

dbname
指定数据库的名称,如果没有指定,会引用环境变量 PGDATABASE, 如果环境变量没有设置,那么会指定使用用户名来连接。

-a
--data-only
只转储数据,而不是架构(数据的定义)。表中的数据,大对象的序列值被转储。此选项与specifying --section=data类似。

-b
--blobs
包含大对象,当指定参数为 --schema, --table, or --schema-only 是该动作默认执行,所以-b选项只在选择性转储数据时有用。

-c
--clean
输出在创建数据库创建命令之前先清理(删除)该数据库对象的命令
此选项只对纯文本格式有意义的。对于归档格式,你可以在调用pg_restore时指定该选项

-C
--create
以一条创建该数据库本身并且与这个数据库联接等命令开头进行输出。 (如果是这种形式的脚本,那么你在运行脚本之前和哪个数据库联接就 不重要了。) ,此选项只对纯文本格式有意义的。对于归档格式,你可以在调用pg_restore时指定该选项。

-E encoding
--encoding=encoding
指定字符集编码。 默认情况下使用数据库编码。 (另一个方法是设置 PGCLIENTENCODING环境来达到同样的结果

-f file
--file=file
把输出发往指定的文件.如果忽略这些,则使用标准输出。

-F format
--format=format
选择输出的格式。 如下:

p
plain
输出一个纯文本 SQL 脚本文件( 默认)

c
custom
输出一个自定义格式用于pg_store 。最灵活的输出格式,它允许恢复过程中手动选择和重新排序的档案条目。默认压缩。

d
directory
输出一个目录格式的存档用于pg_restore输入。 这将创建带有一个存储每张表和BLOB数据的文件的目录,加上一个所谓的内容文件表用机器可以读取的格式 描述转储对象, 这种格式pg_restore可以读取。 默认压缩

t
tar
输出适合输入到 pg_restore 里的tar归档文件. 使用这个归档允许在恢复数据库时重新排序和/或把表结构排除在外. 同时也可能可以在恢复的时候限制对哪些数据进行恢复

-i
--ignore-version
一个工具选项,现在被忽略了.

-n schema
--schema=schema
指定输出的框架名。指定的框架将被输出转储。

-N schema
--exclude-schema=schema
排除输出的框架名。指定的框架将不被输出。

-o
--oids
为每个表都输出对象标识(OID). 如果你的应用在某种程度上引用了OID字段的话,(比如,在外键约束中 用到). 那么使用这个选项. 否则,不应该使用这个选项

-O
--no-owner
不把对象的所有权设置为对应源数据库。 

这个选项只是对纯文本格式有意义.对于其它格式,在你调用 pg_restore 的时候你可以声明该选项.

-R
--no-reconnect
此选项已经过时的,但可以向后兼容.

-s
--schema-only
只输出架构(数据定义),不输出数据。

-S username
--superuser=username
在某些场合,pg_dump 创建的脚本或者归档需要有 超级用户访问的权限,比如在关闭触发器或者为大纲元素甚至所有属性时. 这个选项声明在这些场合时使用的用户名

-t table
--table=table
只输出表 table的数据

-T table
--exclude-table=table
不输出表table的数据

-v
--verbose
声明冗余模式。 这样将令 pg_dump 在标准错误上打印 进度信息.

-V
--version
输出pg_dump的版本信息然后退出.

-x
--no-privileges
--no-acl
避免输出 ACL(赋予/撤消 命令)和表的所有者关系信息

-Z 0..9
--compress=0..9
声明在那些支持压缩的格式中使用的压缩级别.零意味着没有 压缩 (目前只有客户化格式支持压缩) 

--no-security-labels
不转储安全标签.

--no-tablespaces
不输出选择表空间命令.

--no-unlogged-table-data
不转储没有日志记录的表的内容

--quote-all-identifiers
强制引用所有标识符 ,这可能用于转储迁移到未来的版本引入额外的关键字.

-?
--help
显示帮助并退出.

以下选项控制数据库连接参数.

-h host
--host=host
声明运行服务器 的机器的主机名.缺省是使用本地Unix主控套接字,而不是一个 IP 联接. 如果主机名以斜扛开头,则它被用做到 Unix 域套接字的路径

-p port
--port=port
声明服务器 正在侦听并等待联接的TCP/IP 端口或本地 Unix 主控套接字文件句柄. 缺省的端口号是5432,或者环境变量 PGPORT 的值(如果存在)

-U username
--username=username
以给出用户身分联接

-w
--no-password          从来不需要密码提示
-W
--password
强制口令提示.如果服务器需要口令认证,那么这个动作应该自动发生

--role=rolename
指定一个角色的名字是用来创建转储

####################################
pg_dump -d ${DATABASE} -h ${HOST} -p ${PORT} -U ${USER} --format=d --file=${dir_name}/database/esg-$(date +%Y%m%d%H%M%S)

-F format
--format=format
选择输出的格式。 如下:
d
directory
输出一个目录格式的存档用于pg_restore输入。 这将创建带有一个存储每张表和BLOB数据的文件的目录,加上一个所谓的内容文件表用机器可以读取的格式 描述转储对象, 这种格式pg_restore可以读取。 默认压缩
#########################################

十二、pg_restore 恢复数据库

命令格式
pg_restore -d dbname bakfile
恢复示例
1.直接导入
创建待导入数据库
# 以 postgres 的身份执行 psql
$ sudo -u postgres psql
psql (12.10 (Ubuntu 12.10-0ubuntu0.20.04.1))
Type "help" for help.

postgres=# create database new_db;
CREATE DATABASE

# 后面的示例中省略数据库创建的过程
或者直接在 shell 中执行
$ createdb new_db
导入数据库
# -v 选项显示导入过程
pg_restore -v -d new_db db.dmp
在导入的过程中, PostgreSQL 会尝试更新数据库对象的所有者为原始数据库中的角色

2.不更新数据库对象的所有者
增加 -O 或 --no-owner 选项
pg_restore -O -d new_db db.dmp

3.并行导入
支持自定义和目录格式
pg_restore -j 3 -O -d new_db db.dmp

pg_restore -j 3 -O -d new_db dmp_dir/
4.导入前自动删除已有数据
pg_restore -O -c --if-exists -d new_db db.dmp
-c 或 --clean 表示导入前删除数据库对象

5.仅导入数据库的定义结构
创建表, 索引以及约束等内容
pg_restore -d new_db -s db.dmp
-s 或 --schema-only: 仅导入数据库的定义, 不导入数据

6.仅导入数据
已有表结构, 仅导入某张表的数据
# 在示例 5 的基础上导入表的数据
pg_restore -d new_db -t table -a table.dmp
-a 或 --data-only: 仅导入数据


master : 172.16.0.105
slave : 172.16.0.103

1.正常搭建postgresql,并且进行数据库初始化
2.修改master的postgresql.conf配置文件
vi postgresql.conf
listen_addresses = ‘*’
port = 5432
max_connections = 100
wal_level = hot_standby
---------------------------------
[root@localhost data]# find / -name "postgresql.conf"
find: ‘/run/user/977/gvfs’: Permission denied
/etc/postgresql-setup/upgrade/postgresql.conf
/var/lib/pgsql/data/postgresql.conf
/usr/lib/tmpfiles.d/postgresql.conf

[root@localhost data]# cat /var/lib/pgsql/data/postgresql.conf |grep listen_addresses
#listen_addresses = 'localhost'        # what IP address(es) to listen on;

3.在master上创建同步账号,并且授权

create user replica with password '123456' replication;

4.修改master的pg_hba.conf配置,允许从库所在的地址通信
##开放第一条规则是为了在master上可以执行pg_basebackup
##开放第二条规则是为了从库slave可以和master正常通信
host replication replica 172.16.0.105/32 md5
host replication replica 172.16.0.103/32 md5
-----------------------------------------------
[root@localhost data]# find / -name "pg_hba.conf"
find: ‘/run/user/977/gvfs’: Permission denied
/var/lib/pgsql/data/pg_hba.conf

5. 重新加载reload配置文件
pg_ctl -D /data/pg_data/data reload

6. 在master上利用pg_basebackup进行物理全备
/usr/local/pgsql/bin/pg_basebackup -h 172.16.0.105 -p 5432 -U replica -F p -R -X s -D /data/pg_basebackup/

7. 将pg_basebackup备份文件通过scp传输到从机上
scp -r -P 22 pg_basebackup/ root@‘172.16.0.103’:/data/

8. 检查recovery.conf配置文件信息
standby_mode = ‘on’
primary_conninfo = ‘user=replica password=123456 host=172.16.0.105 port=5432 sslmode=disable sslcompression=0 target_session_attrs=any’

9. 在slave上安装postgresql,和master的postgresql安装基本一致,只是不用进行initd初始化

10. 利用slave上pg_basebackup备份文件,启动从库服务
##创建从库相关数据存储路径
mkdir -p /data/pg_data/log
touch /data/pg_data/log/pg.log

##将备份数据作为从库数据进行启动
mv /data/pg_basebackup/ /data/pg_data/data

##修改slave中postgresql.conf将max_connections=host_standby注释掉,否则在启动时候回出现以下错误
LOG: invalid value for parameter “max_connections”: “host_standby”
FATAL: configuration file “/data/pg_data/data/postgresql.conf” contains errors

##启动服务
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /data/pg_data/data/ -l /data/pg_data/log/pg.log start
11. 登录检查是否搭建成功,是否有错误日志信息,是否正常同步等

##在master上检查重库的信息
select * from pg_stat_replication;

##从库是只读模式
SQL 错误 [25006]: ERROR: cannot execute DROP TABLE in a read-only transaction

postgresql的recovery.conf配置文件
  应用于恢复期,恢复开始后则不能再被更改
1)restore_command:用于获取WAL文件系统的一个已归档的本地shell命令
对于归档恢复所必需的
对于流复制是可选的
2)archive_cleanup_command:清理后备服务器不再需要的旧的归档WAL文件提供一种机制

archive_cleanup_command = ‘pg_archivecleanup /data/pg_archive %r’
3)recovery_target:恢复目标设置

##达到一致状态后就会结束,
recovery_target = ‘immediate’

##指定恢复将继续进行的已命名的恢复点,pg_create_restore_point()创建恢复点
recovery_target_name = ‘string_name’

##恢复到的时间戳
recovery_target_time = timestamp
##恢复到指定的事务id
recovery_target_xid = ‘事务id’

##恢复到一个指定的时间线。默认是沿着基础备份建了时的当前时间线恢复
recovery_target_timeline = ‘时间线’

例如:恢复到最新的时间线
recovery_target_timeline = ‘latest’

##到达恢复目标时服务器应该采取什么动作,默认是pause:暂停服务恢复。promote:将结束恢复进程,并且服务开始接受连接;shutdown:在到达恢复目标后停止服务器
recovery_target_action = ‘pause’ / ‘promote’ / ‘shutdown’

4)备用服务器设置

##是否将postgresql服务器作为一个后备服务器启动
standby_mode = ‘on’/ ‘off’

##设置从服务连接到主服务的信息,从而继续进行恢复或同步
primary_conninfo = ‘user=user_name password=pwd host=ipaddr port=port sslmode=disable sslcompression=0 target_session_attrs=any’

##指定在通过流复制连接到主服务器时要使用的现有复制槽,以控制上游节点上的资源删除
primary_slot_name

recovery参考文档:cnblogs.com/yhq1314/p/10045278.html
原文链接:https://blog.csdn.net/weixin_44375561/article/details/121676089



见上一个文档


数据导出到指定文件

debian@backup:/data/backup$ cat backup-esg.sh
#!/bin/bash -

HOST=172.30.3.11
PORT=5432
USER=esg
DATABASE=esg

dir_name=$(dirname $0)
pg_dump -d ${DATABASE} -h ${HOST} -p ${PORT} -U ${USER} --format=d --file=${dir_name}/database/esg-$(date +%Y%m%d%H%M%S)

这是一个用于导出 PostgreSQL 数据库的命令。让我为您解释其中的各个参数和选项:

pg_dump: 这是 PostgreSQL 数据库提供的一个实用程序,用于备份或导出数据库。
-d ${DATABASE}: 指定要导出的数据库名称。${DATABASE}是一个变量,需要替换为实际的数据库名称。
-h ${HOST}: 指定数据库所在的主机名或 IP 地址。${HOST}是一个变量,需要替换为实际的主机名或 IP 地址。
-p ${PORT}: 指定数据库服务的端口号。${PORT}是一个变量,需要替换为实际的端口号。
-U ${USER}: 指定用于连接数据库的用户名。${USER}是一个变量,需要替换为实际的用户名。
--format=d: 指定导出的文件格式为自定义格式 (custom format)。这种格式可以保留数据库的完整性和结构信息。
--file=${dir_name}/database/esg-$(date +%Y%m%d%H%M%S): 指定导出的文件路径和文件名。${dir_name}是一个变量,表示导出文件所在的目录名,${date +%Y%m%d%H%M%S}是一个命令替换,用于生成当前的日期和时间,作为导出文件名的一部分。



要将使用 pg_dump 导出的数据导入到一个新建的数据库表中,您可以使用 pg_restore 命令或 psql 命令。下面我将为您介绍两种方法的基本用法:

使用 pg_restore 导入数据:
pg_restore -d ${NEW_DATABASE} -h ${NEW_HOST} -p ${NEW_PORT} -U ${NEW_USER} ${dump_file}
${NEW_DATABASE}: 新建的目标数据库的名称。
${NEW_HOST}: 目标数据库所在的主机名或 IP 地址。
${NEW_PORT}: 目标数据库服务的端口号。
${NEW_USER}: 用于连接目标数据库的用户名。
${dump_file}: 使用 pg_dump 导出的备份文件的路径

使用 psql 导入数据:
psql -d ${NEW_DATABASE} -h ${NEW_HOST} -p ${NEW_PORT} -U ${NEW_USER} -f ${dump_file}
${NEW_DATABASE}: 新建的目标数据库的名称。
${NEW_HOST}: 目标数据库所在的主机名或 IP 地址。
${NEW_PORT}: 目标数据库服务的端口号。
${NEW_USER}: 用于连接目标数据库的用户名。
${dump_file}: 使用 pg_dump 导出的备份文件的路径。