生活随笔
收集整理的這篇文章主要介紹了
PG数据向Kingbase移植
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前提:PG和Kingbase的數(shù)據(jù)庫均已創(chuàng)建完成。
1.整理PG數(shù)據(jù)。
update my_dev_tab set description = 'dummy' where description is null or description = '';
update my_col_dict set col_name_chn = 'dummy' where col_name_chn is null or col_name_chn = '';
update my_col_dict set col_order = UNIQUE_INT where col_order is null;
清空或刪除db_health表。
2.從PG導(dǎo)出數(shù)據(jù)為SQL語句腳本。
-- -- -- --- --- ------ --- -- ---- --.
3.編輯腳本,使其符合Kingbase要求。
將腳本文件開頭的一段:
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;SET search_path = smartsys, pg_catalog;
改為
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;SET search_path = smartsys;
4.清理Kingbase中表的數(shù)據(jù)。
select出schema中所有的表,生成truncate語句。然后執(zhí)行之。
isql
-d MY_DB_NAME
-h host_ip
-p 54321 -U MY_USER_NAME
-W my_password
-f 1_ctuncate_tabs
.sql
5.禁用Kingbase中的insert觸發(fā)器。
如果需要,先創(chuàng)建存儲過程。然后執(zhí)行之。
CREATE OR REPLACE
PROCEDURE disable_all_insert_triggers()
AS
DECLAREtrigger_cur refcursor;trigger_name_var varchar(
128);table_name_var varchar(
128);sql_var varchar(
1024);
BEGINopen trigger_cur
for select trigger_name, event_object_table
from information_schema.triggers
where event_manipulation =
'INSERT' and trigger_name like
'TI_%';
LOOPfetch trigger_cur
into trigger_name_var, table_name_var;
EXIT WHEN trigger_cur%NOTFOUND;sql_var =
'ALTER TABLE '||table_name_var||
' DISABLE trigger '||trigger_name_var;
raise notice
'%', sql_var;execute immediate sql_var;
end LOOP;close trigger_cur;
END;call disable_all_insert_triggers();
6.執(zhí)行SQL語句腳本導(dǎo)入數(shù)據(jù),并記錄日志。
isql
-d MY_DB_NAME
-h host_ip
-p 54321 -U MY_USER_NAME
-W my_password
-f 1_data_only_utf8
.sql
> imp_2_kdb
.log 2>&1
7.啟用Kingbase中的insert觸發(fā)器。
如果需要,先創(chuàng)建存儲過程。然后執(zhí)行之。
CREATE OR REPLACE
PROCEDURE enable_all_insert_triggers()
AS
DECLAREtrigger_cur refcursor;trigger_name_var varchar(
128);table_name_var varchar(
128);sql_var varchar(
1024);
BEGINopen trigger_cur
for select trigger_name, event_object_table
from information_schema.triggers
where event_manipulation =
'INSERT' and trigger_name like
'TI_%';
LOOPfetch trigger_cur
into trigger_name_var, table_name_var;
EXIT WHEN trigger_cur%NOTFOUND;sql_var =
'ALTER TABLE '||table_name_var||
' ENABLE trigger '||trigger_name_var;execute immediate sql_var;
end LOOP;close trigger_cur;
END;
call enable_all_insert_triggers();
8.檢查導(dǎo)入結(jié)果。
檢查記錄數(shù):打開SQL腳本文件1_data_only_utf8.sql,統(tǒng)計其中出現(xiàn)“INSERT INTO ”的次數(shù);打開日志文件imp_2_kdb.log,統(tǒng)計其中出現(xiàn)“INSERT 0 1”的次數(shù)。兩者應(yīng)相等。同時確認日志文件中沒有出現(xiàn)“ERROR”、“WARN”、“錯誤”、“警告”等字樣。
檢查中文亂碼:打開一張含有中文的表,肉眼檢查一下中文字段是否為亂碼。
總結(jié)
以上是生活随笔為你收集整理的PG数据向Kingbase移植的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。