【云圖說】第235期 DDS讀寫兩步走 帶您領(lǐng)略只讀節(jié)點(diǎn)的風(fēng)采
1390
2022-05-30
1 創(chuàng)建數(shù)據(jù)庫
本文將介紹購買云數(shù)據(jù)庫RDS實(shí)例后,如何通過數(shù)據(jù)管理服務(wù)DAS或命令行創(chuàng)建數(shù)據(jù)庫,以及創(chuàng)建數(shù)據(jù)庫過程中的注意事項(xiàng)。
1.1 數(shù)據(jù)庫命名規(guī)范
postgresql的關(guān)鍵字長度不能超過63個(gè)字節(jié),因此建議業(yè)務(wù)側(cè)的數(shù)據(jù)庫名的長度不超過30個(gè)字符;
數(shù)據(jù)庫命名建議僅使用小寫字母、下劃線、數(shù)字這三類字符。禁止以pg、數(shù)字、下劃線開頭,禁止使用保留字,保留字請參考官方文檔。
1.2 通過DAS圖形化向?qū)?chuàng)建數(shù)據(jù)庫
步驟 1 登錄管理控制臺。
步驟 2 單擊管理控制臺左上角,選擇區(qū)域和項(xiàng)目。
步驟 3 選擇“數(shù)據(jù)庫 > 云數(shù)據(jù)庫 RDS”。進(jìn)入云數(shù)據(jù)庫 RDS信息頁面。
步驟 4 “實(shí)例管理”頁面,選擇目標(biāo)實(shí)例,單擊操作列的“登錄”,進(jìn)入數(shù)據(jù)管理服務(wù)實(shí)例登錄界面。
您也可以在“實(shí)例管理”頁面,單擊目標(biāo)實(shí)例名稱,在頁面右上角,單擊“登錄”,進(jìn)入數(shù)據(jù)管理服務(wù)實(shí)例登錄界面。
步驟 5 正確輸入數(shù)據(jù)庫用戶名和密碼,單擊“登錄”,即可進(jìn)入您的數(shù)據(jù)庫并進(jìn)行管理。
步驟 6 進(jìn)入首頁,單擊“新建數(shù)據(jù)庫”,在彈出框填寫數(shù)據(jù)庫名稱、字符集、數(shù)據(jù)庫模板、Collate、Ctype等,詳細(xì)信息請參考1.3節(jié) 參數(shù)說明。
步驟 7 確認(rèn)填寫信息正確后,單擊“確定”。
1.3 通過命令行創(chuàng)建數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫時(shí),您可以指定模板庫,并為每個(gè)數(shù)據(jù)庫設(shè)置不同的字符集、本地化collate等屬性。
通過數(shù)據(jù)管理服務(wù)DAS查詢窗口、psql或者pgadmin等工具連接到數(shù)據(jù)庫(本章節(jié)以數(shù)據(jù)管理服務(wù)DAS查詢窗口為例),使用命令行示例來介紹如何通過CREATE DATABASE命令設(shè)置。
本土化信息collate包括LC_COLLATE(字符排序規(guī)則) 和 LC_CTYPE(字符分類),詳細(xì)介紹請參考官方文檔。
語法格式
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ] ]
操作步驟
步驟 1 登錄管理控制臺。
步驟 2 單擊管理控制臺左上角的,選擇區(qū)域和項(xiàng)目。
步驟 3 選擇“數(shù)據(jù)庫 > 云數(shù)據(jù)庫 RDS”。進(jìn)入云數(shù)據(jù)庫 RDS信息頁面。
步驟 4 在“實(shí)例管理”頁面,選擇目標(biāo)實(shí)例,單擊操作列的“登錄”,進(jìn)入數(shù)據(jù)管理服務(wù)登錄界面。
步驟 5 正確輸入數(shù)據(jù)庫用戶名和密碼,單擊“登錄”,即可進(jìn)入您的數(shù)據(jù)庫。
步驟 6 在“SQL窗口”輸入命令創(chuàng)建數(shù)據(jù)庫。
create database 數(shù)據(jù)庫名;
參數(shù)說明
TEMPLATE
PostgreSQL數(shù)據(jù)庫默認(rèn)有template0、template1兩個(gè)模板,默認(rèn)模板為template1,使用template1模板庫建庫時(shí)不可指定新的字符集,否則會(huì)報(bào)錯(cuò)。用戶也可以指定其他的自定義模板創(chuàng)建數(shù)據(jù)庫。
ENCODING
創(chuàng)建數(shù)據(jù)庫時(shí)可以通過WITH ENCODING指定字符集,字符集含義及支持的字符集類型請參考官方文檔。
LC_COLLATE
字符排序規(guī)則,默認(rèn)en_US.utf8。
不同的排序規(guī)則下,相同字符串的比較其結(jié)果可能是不同的。
例如,在en_US.utf8下, SELECT 'a'>'A'; 執(zhí)行結(jié)果為false,但在'C'下,SELECT 'a'>'A'; 結(jié)果為true。如果數(shù)據(jù)庫從“O”遷移到PostgreSQL,數(shù)據(jù)庫排序集需使用'C'才能得到一致的預(yù)期。支持的排序規(guī)則可以查詢系統(tǒng)表 pg_collation。
LC_CTYPE
字符集中的字符分類,用來區(qū)分字母、數(shù)字、及大小寫等,支持的字符分類可以查詢系統(tǒng)表 pg_collation。
其余參數(shù)請參考官方文檔,此章節(jié)不再贅述。
參數(shù)使用方式
通過TEMPLATE指定數(shù)據(jù)庫模板
使用 template1 模板庫建庫時(shí)不可指定新的字符集和本地化collate屬性,collate屬性請參見?1.3節(jié) 設(shè)置數(shù)據(jù)庫的本土化信息(collate)。
CREATE DATABASE my_db WITH TEMPLATE template1 ;
使用template0可指定字符集和本地化collate屬性,collate屬性請參見?1.3節(jié) 設(shè)置數(shù)據(jù)庫的本土化信息(collate)。
CREATE DATABASE my_db WITH ENCODING = 'UTF8' LC_COLLATE ='zh_CN.utf8' LC_CTYPE ='zh_CN.utf8' TEMPLATE = template0 ;
創(chuàng)建數(shù)據(jù)庫時(shí)不指定模板,則默認(rèn)模板為template1。用戶也可以指定其他的自定義模板創(chuàng)建數(shù)據(jù)庫。
CREATE DATABASE my_db WITH TEMPLATE = mytemplate;
通過WITH ENCODING指定字符集
CREATE DATABASE my_db WITH ENCODING 'UTF8';
LC_COLLATE和LC_CTYPE
查詢字符集支持的LC_COLLATE和LC_CTYPE信息
SELECT pg_encoding_to_char(collencoding) AS encoding,collname,collcollate AS "LC_COLLATE",collctype AS "LC_CTYPE" FROM pg_collation;
encoding為空時(shí),表示當(dāng)前LC_COLLATE支持所有的字符集。
設(shè)置數(shù)據(jù)庫的本土化信息(collate)
執(zhí)行如下命令,創(chuàng)建一個(gè) LC_COLLATE 和 LC_CTYPE 分別為 zh_CN.utf8 的數(shù)據(jù)庫。
CREATE DATABASE my_db WITH ENCODING = 'UTF8' LC_COLLATE ='zh_CN.utf8' LC_CTYPE ='zh_CN.utf8' TEMPLATE = template0 ;
如果指定的LC_COLLATE與字符集不兼容,則會(huì)報(bào)如下錯(cuò)誤信息。
1. 指定的LC_COLLATE和LC_CTYPE必須與目標(biāo)字符集兼容,參考?1.4.1節(jié) 查詢字符集支持的LC_COLLATE和..查詢出的字符集,否則會(huì)報(bào)錯(cuò)。
2. 目前無法直接通過ALTER DATABASE命令修改已有數(shù)據(jù)庫的LC_COLLATE和LC_CTYPE信息,但可以通過創(chuàng)建新的數(shù)據(jù)庫,然后導(dǎo)出再導(dǎo)入數(shù)據(jù)的方式進(jìn)行修改。
1.4 常見問題
1.4.1 如何查看已經(jīng)創(chuàng)建的數(shù)據(jù)庫以及數(shù)據(jù)庫的字符集、LC_COLLATE和LC_CTYPE信息?
通過psql元命令\ l,可以查看已經(jīng)創(chuàng)建的數(shù)據(jù)庫。
通過查詢系統(tǒng)表pg_database。
1.4.2 創(chuàng)建數(shù)據(jù)庫時(shí)報(bào)字符集與locale不匹配如何解決?
選擇與字符集不匹配的LC_COLLATE創(chuàng)建數(shù)據(jù)庫時(shí)會(huì)報(bào)如下錯(cuò)誤。
CREATE DATABASE my_db2 WITH LC_COLLATE ='zh_SG' LC_CTYPE ='zh_SG' ;
解決方法:
查詢模板庫支持的字符集,查詢方法見?1.4.1節(jié) 查詢支持的字符集,默認(rèn)模板庫為template1。
查詢模板庫字符集支持的LC_COLLATE信息,查詢方法見?1.3節(jié) 設(shè)置數(shù)據(jù)庫的本土化信息(collate)。
修改為與字符集匹配的LC_COLLATE,重新創(chuàng)建數(shù)據(jù)庫。
1.4.3 從“O”遷移到PostgreSQL時(shí)如何選擇排序規(guī)則?
PostgreSQL數(shù)據(jù)庫服務(wù)端不支持gbk,默認(rèn)en_US.utf8。從“O”遷移到PostgreSQL,排序規(guī)則選擇'C'才能得到一致的預(yù)期。
PostgreSQL 云數(shù)據(jù)庫 PostgreSQL 數(shù)據(jù)庫
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。