国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

postgresql|數(shù)據(jù)庫|批量執(zhí)行SQL腳本文件的shell腳本

這篇具有很好參考價(jià)值的文章主要介紹了postgresql|數(shù)據(jù)庫|批量執(zhí)行SQL腳本文件的shell腳本。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:

對于數(shù)據(jù)庫的維護(hù)而言,肯定是有SQL腳本的執(zhí)行,例如,某個(gè)項(xiàng)目需要更新,那么,可能會有很多的SQL腳本需要執(zhí)行,SQL腳本可能會包含有建表,插入數(shù)據(jù),索引建立,約束建立,主外鍵建立等等內(nèi)容。

那么,幾個(gè)SQL腳本可能無所謂,navicat或者psql命令行 簡簡單單的就導(dǎo)入了,但是有的時(shí)候腳本會比較多并且有的時(shí)候腳本會有執(zhí)行順序要求,很顯然,navicat會力不從心的,一個(gè)個(gè)點(diǎn)SQL文件導(dǎo)入也會有遺漏的情況,因此,編寫一個(gè)可自動(dòng)執(zhí)行SQL腳本文件的shell腳本就顯得很有必要了。

下面,將就以上需求,編寫一個(gè)可用的,通用的批量導(dǎo)入SQL腳本。

一,

SQL腳本的內(nèi)容

#!/bin/bash
#!author zsk
set -eu
#describe 該腳本是批量導(dǎo)入SQL語句的腳本。
#set -eu是檢查腳本內(nèi)的變量,防止空參的情況出現(xiàn)。
#如果SQL腳本遇到錯(cuò)誤,將會立刻停止,主要是參數(shù)-v ON_ERROR_STOP=1的作用
#變量  $1 是SQL腳本的存放路徑,沒有對SQL腳本文件的檢查,因此,請確定輸入的目錄正確性
# 該腳本限定運(yùn)行在非root用戶,也就是普通用戶下,在執(zhí)行SQL腳本的同時(shí)輸出logs文件在普通用戶根目錄下
#如果有任何錯(cuò)誤,可查看日志文件并結(jié)合該腳本的控制臺輸出查找問題并及時(shí)解決。
#以下是五個(gè)變量,按需要修改即可。
sql_file=`ls $1|grep sql |sort -n`
database=test
pg_user=postgres
port=5432
pwd=$1
mkdir -p $pwd/success
sqlfile_success=$pwd/success
#這個(gè)是批量執(zhí)行SQL文件的入口函數(shù),日志文件放置在了postgresql用戶的根目錄
#如果有SQL腳本執(zhí)行失敗,腳本將會停止,如果SQL腳本執(zhí)行成功,將會打印成功執(zhí)行的SQL腳本名稱
#成功執(zhí)行的腳本將被移動(dòng)到腳本所在目錄下的success目錄下,將執(zhí)行失敗的腳本原因找到后
#可再次從失敗的SQL腳本執(zhí)行,等于斷點(diǎn)執(zhí)行。
sql1 ()
{
echo $sql_file
for i in $sql_file
do psql -U$pg_user -p$port -d $database -v ON_ERROR_STOP=1 -f $pwd$i 2>&1 >>~/logs
if [ $? -eq 0 ]
then
echo -e "\033[32m $pwd$i 這個(gè)SQL腳本執(zhí)行成功了!?。?!\033[0m"
mv $pwd$i $pwd/success/
echo -e "\033[33m $pwd$i $pwd$i 移動(dòng)到了success目錄下 \033[0m"
else
echo -e "\033[31m $dir$i 這個(gè)SQL腳本沒有能夠執(zhí)行成功,請查看日志查找原因?。。?!\033[0m"
exit
fi
done
}
if [ `whoami` == "root" ]
then
#天藍(lán)底黑字
echo  -e "\033[46;30m 該腳本不能運(yùn)行在root用戶下,請?jiān)趐ostgresql用戶下運(yùn)行該腳本,腳本即將結(jié)束?。。033[0m"
sleep 5
exit 
else

read -p "檢查SQL文件,請確定文件是否是正確的排列順序,并做出選擇,yes,批量運(yùn)行指定SQL腳本;no,退出此腳本:" result
echo  -e "\033[35m 將要批量執(zhí)行的SQL文件如下:$result \033[0m"
case $result in
     "yes")
      sql1
      ;;
      "no")
      echo -e "\033[45;30m 您的選擇是no,因此,該腳本將會自行退出了?。。?!\033[0m"
      exit 110
      ;;
      *)
      echo -e "\033[41;30m 您的選擇不合適,不是yes或者no,請重新運(yùn)行腳本,慎重輸入您的選擇?。。033[0m"
      exit 220
      ;;
esac

fi

二,

腳本功能介紹

以上腳本具有以下功能,并經(jīng)過了測試,對于多少個(gè)SQL腳本,基本都是毫無壓力

1,

腳本限定運(yùn)行在普通用戶下,如果是root用戶,該腳本將不會被執(zhí)行

2,

腳本內(nèi)的變量問題

需要根據(jù)自己的實(shí)際情況修改變量,主要是這三個(gè)變量:

database=test
pg_user=postgres
port=5432

SQL腳本內(nèi)定義的數(shù)據(jù)庫名稱,本例是test數(shù)據(jù)庫,一般情況下,SQL腳本最好還是使用postgre這個(gè)超級用戶,以確保SQL腳本的正確執(zhí)行。port是數(shù)據(jù)庫開放的端口,一般都不會是默認(rèn)的5432端口

3,

shell腳本的邏輯

通過$1也就是外部參數(shù),這個(gè)參數(shù)是SQL腳本的存放路徑,該參數(shù)傳入腳本后,首先,運(yùn)行用戶檢測if語句,判斷是非root用戶后,將進(jìn)入下一步,否則腳本退出。

read命令后,接收用戶輸入,限定在yes,no,或者其它輸出的選擇,如果是輸入的yes,那么,就開始SQL導(dǎo)入,這里是調(diào)用上面的函數(shù),函數(shù)名稱是psql1,如果有一些別的想法還沒準(zhǔn)備好,那么,輸入no,將會退出腳本。如果輸錯(cuò)了,也就是其它任意,也會退出腳本,并做一個(gè)小的提示:重新運(yùn)行腳本

sql1函數(shù)是腳本的主要功能,通過for循環(huán),讀取外部參數(shù)$1設(shè)定的目錄下的所有SQL文件,并按SQL文件的名稱排序,并逐個(gè)執(zhí)行。

如果在執(zhí)行SQL腳本中,SQL腳本有報(bào)錯(cuò),將會停止整個(gè)腳本,并在控制臺打印出錯(cuò)信息,如果執(zhí)行成功的,將把成功執(zhí)行的SQL腳本文件移入$1 目錄下新建的success文件夾,也就達(dá)到了斷點(diǎn)執(zhí)行的效果。

三,

腳本執(zhí)行的效果示例:

SQL腳本內(nèi)容:

[pg1@EULEER ~]$ cat  SQL/1emp-bak.sql 
--
-- PostgreSQL database dump
--

-- Dumped from database version 12.5
-- Dumped by pg_dump version 12.5

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;

SET default_tablespace = '';

SET default_table_access_method = heap;

--
-- Name: emp; Type: TABLE; Schema: mytest; Owner: postgres
--
drop  table if  exists mytest.emp ;
CREATE TABLE if not exists mytest.emp (
    empno numeric NOT NULL,
    ename character varying(10),
    job character varying(9),
    mgr numeric,
    hiredate date,
    sal numeric(7,2),
    comm numeric(7,2),
    deptno numeric(2,0)
);


ALTER TABLE mytest.emp OWNER TO postgres;

--
-- Data for Name: emp; Type: TABLE DATA; Schema: mytest; Owner: postgres
--

COPY mytest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) FROM stdin;
7369	SMITH	CLERK	7902	1980-12-17	800.00	\N	20
7499	ALLEN	SALESMAN	7698	1981-02-20	1600.00	300.00	30
7521	WARD	SALESMAN	7698	1981-02-22	1250.00	500.00	30
7566	JONES	MANAGER	7839	1981-04-02	2975.00	\N	20
7654	MARTIN	SALESMAN	7698	1981-09-28	1250.00	1400.00	30
7698	BLAKE	MANAGER	7839	1981-05-01	2850.00	\N	30
7782	CLARK	MANAGER	7839	1981-06-09	2450.00	\N	10
7788	SCOTT	ANALYST	7566	0087-04-19	3000.00	\N	20
7839	KING	PRESIDENT	\N	1981-11-17	5000.00	\N	10
7844	TURNER	SALESMAN	7698	1981-09-08	1500.00	0.00	30
7876	ADAMS	CLERK	7788	0087-05-23	1100.00	\N	20
7900	JAMES	CLERK	7698	1981-12-03	950.00	\N	30
7902	FORD	ANALYST	7566	1981-12-03	3000.00	\N	20
7934	MILLER	CLERK	7782	1982-01-23	1300.00	\N	10
\.


--
-- Name: emp pk_emp; Type: CONSTRAINT; Schema: mytest; Owner: postgres
--

ALTER TABLE ONLY mytest.emp
    ADD CONSTRAINT pk_emp PRIMARY KEY (empno);


--
-- Name: emp fk_deptno; Type: FK CONSTRAINT; Schema: mytest; Owner: postgres
--

--ALTER TABLE ONLY mytest.emp
--    ADD CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES mytest.dept(deptno);


--
-- PostgreSQL database dump complete
--

輸入no和任意輸出的結(jié)果:?

postgresql|數(shù)據(jù)庫|批量執(zhí)行SQL腳本文件的shell腳本

正確輸入yes后的SQL腳本批量執(zhí)行:

postgresql|數(shù)據(jù)庫|批量執(zhí)行SQL腳本文件的shell腳本?

?文章來源地址http://www.zghlxwxcb.cn/news/detail-427997.html

到了這里,關(guān)于postgresql|數(shù)據(jù)庫|批量執(zhí)行SQL腳本文件的shell腳本的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • postgresql|數(shù)據(jù)庫|SQL語句沖突的解決

    postgresql數(shù)據(jù)庫是比較復(fù)雜的一個(gè)關(guān)系型數(shù)據(jù)庫,而有些時(shí)候,即使是簡單的插入更新操作也是有很多復(fù)雜的機(jī)制。 那么,什么是沖突?什么時(shí)候會遇到?jīng)_突(也就是沖突的常見場景)?如果有沖突我們應(yīng)該怎么去解決?這些問題我想應(yīng)該是在此文章中詳細(xì)說明的。 復(fù)雜點(diǎn)的

    2024年02月06日
    瀏覽(26)
  • 四種數(shù)據(jù)庫執(zhí)行腳本文件導(dǎo)入數(shù)據(jù)的方式

    mysql執(zhí)行sql腳本文件的方法: 1、在命令行輸入mysql -uroot -h10.235.5.55 -p’123456’ -P3306 F:helloniuzi.sql 2、在命令行輸入【source F:helloniuzi.sql】 mysql -uroot -h10.235.5.55 -p’123456’ -P3306 -e \\\"source test.sql \\\" test.log psql -Upostgres -dzxin -h10.235.5.55 -p6789 -f test.sql upgrade.log isql -Uzxin_smap -P’123456’

    2024年02月04日
    瀏覽(16)
  • [運(yùn)維|數(shù)據(jù)庫] PostgreSQL數(shù)據(jù)庫對MySQL的 READS SQL DATA 修飾符處理

    在 PostgreSQL 中,訪問權(quán)限通常是通過數(shù)據(jù)庫角色和表級別的權(quán)限進(jìn)行管理,而不需要類似 MySQL 中的 READS SQL DATA 修飾符。 要在 PostgreSQL 中管理數(shù)據(jù)庫對象的訪問權(quán)限,您可以使用以下 SQL 命令: GRANT :授予用戶或角色對表、視圖等對象的特定權(quán)限。 REVOKE :撤銷用戶或角色對

    2024年02月07日
    瀏覽(20)
  • 【PHP語言-PDO接口】PDO接口執(zhí)行腳本操作數(shù)據(jù)庫

    【PHP語言-PDO接口】PDO接口執(zhí)行腳本操作數(shù)據(jù)庫

    目錄 前言: 一、 PDO簡介 二、 PDO對象方法 三、實(shí)戰(zhàn)中心 PDO:數(shù)據(jù)庫抽象層 簡介:PDO擴(kuò)展為PHP訪問數(shù)據(jù)庫定義了一個(gè)輕量級的、一致性的接口,PDO解決了數(shù)據(jù)庫連接不統(tǒng)一的問題。 1、PDO簡介 (1)PHP的PDO(PHP Data Objects)是一種用于在PHP中訪問數(shù)據(jù)庫的擴(kuò)展。它提供了一個(gè)統(tǒng)

    2024年02月13日
    瀏覽(20)
  • sql在數(shù)據(jù)庫執(zhí)行正常在mybatis中執(zhí)行很慢

    最近項(xiàng)目組壓力測試發(fā)現(xiàn)一個(gè)BUG,某個(gè)分頁查詢sql在數(shù)據(jù)量變大之后,在數(shù)據(jù)庫執(zhí)行正常,在mybatis執(zhí)行很慢。 代碼如下(示例): 這樣替換之后,確實(shí)變快了,但是${}的寫法不能防sql注入。 代碼如下(示例): 以上就是本次BUG的解決過程,原因猜測可能是數(shù)據(jù)量增長后,

    2024年02月13日
    瀏覽(32)
  • 數(shù)據(jù)庫中的SQL是如何執(zhí)行的?

    數(shù)據(jù)庫中的SQL是如何執(zhí)行的?

    參考文獻(xiàn):03丨學(xué)會用數(shù)據(jù)庫的方式思考SQL是如何執(zhí)行的 以oracle和MySQL為例,講解了sql是怎么被執(zhí)行的,并且對比了執(zhí)行過程中,oracle和MySQL的異同。 個(gè)人感覺,講解的核心是SQL執(zhí)行時(shí)的緩存機(jī)制。 自我口述一下 sql語句在提交后, 首先進(jìn)行“語法檢查”,檢查sql語法是否正

    2024年02月09日
    瀏覽(28)
  • 數(shù)據(jù)庫--SQL關(guān)鍵字的執(zhí)行順序

    數(shù)據(jù)庫--SQL關(guān)鍵字的執(zhí)行順序

    數(shù)據(jù)庫-- 數(shù)據(jù)類型 : http://t.csdn.cn/RtqMD 數(shù)據(jù)庫-- 三大范式、多表查詢、函數(shù)sql: http://t.csdn.cn/udJSG 數(shù)據(jù)庫-- MySQL增刪改查: http://t.csdn.cn/xkiti select? ?from? ?join? ?where? ?group by? ?having? ?order by? ?聚合函數(shù)? ?limit? ?top? 以及邏輯運(yùn)算符not? and? ? or? ? 一: 語法順序 ? ?

    2024年02月12日
    瀏覽(22)
  • 實(shí)例講解C++連接各種數(shù)據(jù)庫,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 數(shù)據(jù)庫

    ? C++ 是一種通用的編程語言,可以使用不同的庫和驅(qū)動(dòng)程序來連接各種數(shù)據(jù)庫。以下是一些示例代碼,演示如何使用 C++ 連接 SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 數(shù)據(jù)庫。 連接 SQL Server 數(shù)據(jù)庫 要使用 C++ 連接 SQL Server 數(shù)據(jù)庫,可以使用 Microsoft 的 ADODB 庫。以

    2024年02月05日
    瀏覽(35)
  • Spring Boot 中批量執(zhí)行 SQL 腳本的實(shí)踐

    Spring Boot 中批量執(zhí)行 SQL 腳本的實(shí)踐

    在Spring Boot應(yīng)用中,有時(shí)候我們需要批量執(zhí)行存儲在數(shù)據(jù)庫中的 SQL 腳本。本文將介紹一個(gè)實(shí)際的案例,演示如何通過 Spring Boot、MyBatis 和數(shù)據(jù)庫來實(shí)現(xiàn)這一目標(biāo)。 0、數(shù)據(jù)庫層 1. 控制器層(Controller) 2. 服務(wù)層(Service) 3. 數(shù)據(jù)訪問層(Mapper) 4. MyBatis 配置文件(BatchUpdateMap

    2024年01月17日
    瀏覽(18)
  • 【Sql】sql server數(shù)據(jù)庫提示:執(zhí)行Transact-SQL語句或批處理時(shí)發(fā)生了異常。 無法打開數(shù)據(jù)庫msdb,錯(cuò)誤:926。

    【Sql】sql server數(shù)據(jù)庫提示:執(zhí)行Transact-SQL語句或批處理時(shí)發(fā)生了異常。 無法打開數(shù)據(jù)庫msdb,錯(cuò)誤:926。

    【問題描述】 打開sql server2008r2數(shù)據(jù)庫的時(shí)候, 系統(tǒng)提示執(zhí)行Transact-SQL語句或批處理時(shí)發(fā)生了異常。 無法打開數(shù)據(jù)庫msdb,錯(cuò)誤:926。 【概念理解】 首先MSDB數(shù)據(jù)庫是的作用: 用于給SQL Server代理提供必要的信息來運(yùn)行調(diào)度警報(bào)、作業(yè)及記錄操作。同時(shí)也會記錄數(shù)據(jù)庫的備份和

    2024年02月04日
    瀏覽(100)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包