使用PostgreSQL 脚本导出数据库的DDL
使用PostgreSQL 脚本导出数据库的DDL
本文主要介绍如何使用基于 PostgreSQL pgdump编写的自定义脚本来导出数据库的DDL。
一、文件说明:
1、pgdump基础语句.sql:pgdump基础语法。 2、PGSQL_bak_Full.sh:实现使用pgdump导出全部对象脚本。 3、PGSQL_bak_Proc_Fun.sh:实现使用pgdump仅导出存储过程和函数对象DDL脚本。 说明:pgdump使用上述脚本导出的DDL存在少量显示问题,使用时请谨慎。 4、PGSQL_bak_Table.sh:实现使用pgdump导出指定一个或多个表、视图 DDL脚本。 注:
这个脚本支持自定义数量的表对象结构导出,脚本中只有示例表名。具体使用时应人工指定,导出全部表时,建议使用PGSQL_bak_Full.sh。
各脚本均支持同时导出一个或多个数据库。
二、脚本结构
具体的脚本格式如下:
#!/bin/bash
#全备方式,一般在从机上执行,适用于小中型PGSQL数据库
#source /etc/profile #加载系统环境变量
#source ~/.bash_profile #加载用户环境变量
#set -o nounset #引用未初始化变量时退出
#set -o errexit #执行shell命令遇到错误时退出
#01 连接数据库所需认证信息
user="postgres"
password="****************"
host="106.54.134.160"
port="5432"
#02 需备份的数据库,数组形式,如果只需备份一个数据库,只需保留一个库名称即可
db=("postgres" "kingland")
#03 备份路径及文件名格式设置
pgsql_path="/usr/local/backupdata"
backup_path="${pgsql_path}/backup"
date=$(date +%Y-%m-%d_%H-%M-%S)
backup_log="${pgsql_path}/backup.log"
#建立备份目录
if [ ! -e $backup_path ];then
mkdir -p $backup_path
fi
echo "开始备份数据库:${db[*]}"
#04 备份
backup_sql(){
dbname=$1
backup_name="${dbname}_${date}.sql"
#-R备份存储过程,函数,触发器
pg_dump -s "host=$host user=$user port=$port password=$password dbname= $dbname">$backup_path/$backup_name
if [[ $? == 0 ]];then
cd $backup_path
echo "$date 备份 $dbname成功 "
else
cd $backup_path
rm -rf $backup_name
echo "$date 备份 $dbname 失败 "
fi
}
#05 循环备份
length=${#db[@]}
for (( i = 0; i < $length; i++ )); do
backup_sql ${db[$i]} >> $backup_log 2>&1
done
echo "备份结束,结果查看 $backup_log"
du $backup_path/*$date* -sh | awk '{print "文件:" $2 ",大小:" $1}'
说明:
01:连接数据库所需认证信息
用户为数据库用户和密码,端口号为默认的5432;
02:需备份的数据库
支持一个或多个数据库备份,数据库名称需要使用双引号引起来;
03:备份路径及文件名格式设置
要确保pgsql_path变量中对应的物理路径要存在,特别是backup文件夹也要提前建好;具体的文件名称格式使用时间后缀,该格式可以自定义;
04、05:循环备份
根据前面的配置进行循环备份,如果备份失败,脚本会自动删除过程备份数据。
备份记录自动记录log文件到backup.log中。
三、其他说明
各文件关键参数区别
1、PGSQL_bak_Full.sh
#-R备份存储过程,函数,触发器
pg_dump -s "host=$host user=$user port=$port password=$password dbname= $dbname">$backup_path/$backup_name
-s
--schema-only
只输出对象定义(模式),不输出数据。
2、PGSQL_bak_Proc_Fun.sh
#-Fc备份存储过程(函数)定义
pg_dump -s -Fc "host=$host user=$user port=$port password=$password dbname= $dbname">$backup_path/$backup_name
3、PGSQL_bak_Table.sh
#--t只导出指定表 这里示例表test ,实际使用中应按需指定
pg_dump -s -t test "host=$host user=$user port=$port password=$password dbname= $dbname">$backup_path/$backup_name
这里的test是测试表,实际生产活动中应修改为对应的表名;如果一次性要导出多个表,使用pg_dump -t table1 -t table2 -t table3 这种格式。
四、结果说明
导出结构文本内容格式:
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.15 (Ubuntu 10.15-0ubuntu0.18.04.1)
-- Dumped by pg_dump version 10.15 (Ubuntu 10.15-0ubuntu0.18.04.1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: DATABASE postgres; Type: COMMENT; Schema: -; Owner: postgres
--
COMMENT ON DATABASE postgres IS 'default administrative connection database';
--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
--
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
--
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
--
-- Name: delete_ebd_compute_log_three_month_ago_data(); Type: FUNCTION; Schema: public; Owner: postgres
--
CREATE FUNCTION public.delete_ebd_compute_log_three_month_ago_data() RETURNS void
LANGUAGE plpgsql
AS $$
begin
select * from test;
END;
$$;
ALTER FUNCTION public.delete_ebd_compute_log_three_month_ago_data() OWNER TO postgres;
--
-- Name: sales_tax(real); Type: FUNCTION; Schema: public; Owner: postgres
--
CREATE FUNCTION public.sales_tax(subtotal real) RETURNS real
LANGUAGE plpgsql
AS $$
BEGIN
RETURN subtotal * 0.06;
END;
$$;
ALTER FUNCTION public.sales_tax(subtotal real) OWNER TO postgres;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: test; Type: TABLE; Schema: public; Owner: postgres
--
CREATE TABLE public.test (
id integer,
name character varying(38)
);
ALTER TABLE public.test OWNER TO postgres;
--
-- Name: v_test; Type: VIEW; Schema: public; Owner: postgres
--
CREATE VIEW public.v_test AS
SELECT test.id,
test.name
FROM public.test;
ALTER TABLE public.v_test OWNER TO postgres;
--
-- PostgreSQL database dump complete
--
使用PostgreSQL 脚本导出数据库的DDL的更多相关文章
- MySQL导入sql脚本 导出数据库
导出数据库 不能停止服务 cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) mysqldump -u用户名 -p 数据库名 > 导出的文件名 ...
- POSTGRESQL 创建表结构、修改字段、导入导出数据库(支持CSV)
这两个月经常使用postgresql,总结一些经常使用的语句: --创建表 CREATE TABLE customers ( customerid SERIAL primary key , compa ...
- DAC--使用DAC来导出数据库脚本
//============================================== //功能介绍:使用DAC来导出数据库脚本 //注意事项: //1.本程序涉及到的DLL有: // - ...
- 使用python脚本从数据库导出数据到excel
python从数据库导出数据到excel 最近需要从数据库里导出一些数据到excel,刚开始我是使用下面的命令 select * from xxx where xxx into outfile 'xx ...
- PD脚本导出到数据库后没有注释问题
昨天PD里建了几张表,建表的时候我在NAME栏位写了中文说明,但是脚本在数据库里生成表以后,发现中文说明没有了,需要自己在“注释”栏位添加才行,如下图: 我想要达到的效果如下图: 解决方法: 1. ...
- MySQL之 Mysqldump导出数据库
参数大全 参数说明 --all-databases , -A 导出全部数据库. mysqldump -uroot -p --all-databases --all-tablespaces , -Y 导 ...
- DB2导入导出数据库数据
导出数据库中数据 在db2cmd命令下生成建库脚本(-z指定模式名) db2look -d BBS -z db2admin -u db2admin -e -o bbs.sql 在db2cmd命令下导出 ...
- 使用PLSQL导入导出数据库
Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作 Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操 ...
- mysql导出数据库几种方法
方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...
随机推荐
- ABC220H - Security Camera
考虑折半,将点按照标号是否 \(\le \frac{n}{2}\) 分成两个集合 \(S_1, S_2\). 首先原问题的形式有点奇怪,我们不妨统计没有被覆盖覆盖的边为偶数条的情况. 这样一来问题转化 ...
- KMP 入门
再次学习 \(\rm KMP\) 后不一样的理解. 一些概念 定义字符串 \(S\) 的真 前/后 缀为非自身的 前/后 缀. 定义字符串 \(S\) 的 \(border\) 为 \(S\) 的公共 ...
- opencv结构IplImage
转载请注明来源:https://www.cnblogs.com/hookjc/ typedef struct _IplImage{int nSize; /* Ip ...
- KVC替换系统的tabbar为自定义tabbar---秀清
CustomTabbar *tabbar = [[CustomTabbar alloc]init]; //KVC,更换系统的tabbar为自定义tabbar tabbar.tabbarDelegate ...
- VUE3 之 动态组件 - 这个系列的教程通俗易懂,适合新手
1. 概述 暗示效应告诉我们: 巧妙的暗示会在不知不觉中剥夺我们的判断力,对我们的思维形成一定的影响,造成我们行为的些许改变或者偏差. 例如你的朋友说你脸色不太好,是不是病了,此时,你可能就会感觉浑身 ...
- MySQL高性能学习笔记
索引 何为索引?有什么作用? 索引是一种用于快速查询和检索数据的数据结构.常见的索引结构有: B 树, B+树和 Hash. 索引的作用就相当于目录的作用.打个比方: 我们在查字典的时候,如果没有目录 ...
- 【第二十三期】春招实习阶段性总结(阿里云已OC)
本人算是一个半路出家找工作的菜鸡了,现在手中阿里云云原生offer.百度度小满offer.腾讯PCG二面环节.美团点评等offer环节.希望我的经历分享能对各位或之后准备春招的同学有帮助. 个人背景 ...
- 我是如何破解你的WINDOWS密码的 ?(1)
我是如何破解你的WINDOWS密码的 ?(1) 密码可以看作我们主要,甚至某些情况下唯一可用于防范入侵的防线.就算入侵者无法在物理上接触到计算机,对于对外的Web应用,他们依然可以通过远程桌面协议或身 ...
- 添加删除系统右键菜单(就是上下文菜单,也就是Context Menu)中的一些选项
随着电脑安装的东西越来越多,右侧菜单也原来越长,很不方面.所以打算清理一下 我删除的大约以下几个,友好一点的都可以配置.当然也可以通过注册表直接删除. 特:注册表备份,即导入导出,避免一失足成千古恨. ...
- 树莓派PICO刷入MicroPython内核的两种方式
一.MicroPython简介 MicroPython 是 Python 3编程语言的精简高效实现,其中包括 Python 标准库的一小部分,并且经过优化,可在微控制器和受限环境中运行. 可以在 25 ...