PostgreSql建立資料庫的文法是:
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name]
[ TEMPLATE [=] template]
[ ENCODING [=] encoding]
[ LC_COLLATE [=] lc_collate]
[ LC_CTYPE [=] lc_ctype]
[ TABLESPACE [=] tablespace_name]
[ CONNECTION LIMIT[=] connlimit ] ]
其中方括号内的都是為可選的參數,換句話說建立一個資料庫的文法可是是這樣:
Create database database_name;
那麼參數都是為預設的,Owner就是目前的使用者,template是template1,encoding是template1的編碼,LC_COLLATE,LC_CTYPE,TABLESPACE,CONNECTIONLIMIT與template1的配置保持一緻。
PostgreSql資料庫中預設存在兩個模闆template0,template1,其實template0是templat1的一個克隆,在安裝完資料庫後預設存在的,建立資料庫時不一定要使用這兩個模闆中的一個,可以使别的資料庫。如存在一個資料庫test需要建立資料庫testdb,并且以test為模闆,那麼這個時候test資料不能有任何連接配接。
下面對參數進行解釋:
OWNER:表示擁有者,一般都是建立者;
TEMPLATE:表示建立資料庫的模闆;
ENCODING:表示新建立的資料庫的字元集,如'SQL_ASCII',LATIN1;
LC_COLLATE: 表示字元串排序規則,如collate‘C’或者’de_DE’,’es_ES’;
LC_CTYPE:一般與LC_COLLATE保持一緻,指的是字元分類;
TABLESPACE:表示建立的資料庫在那個表空間,預設為default;
Connection LImIT:表示并發的連接配接數;
需要注意的是
1、 在建立資料庫時需要超級使用者;
2、 并發連接配接數隻是一個近似的值,并不是精确的,比如100個連接配接,已經使用99個,那麼此時兩個連接配接需要連接配接,此時很可能兩個連接配接都失敗,當然如果是超級使用者的話是不受這個限制的;
3、 TABLESPACE是另外建立的,如:
Create tablespace tablespace_name LOCATION ‘C:/data’;
4、 特别注意的是template參數指的是需要建立的資料庫的模闆,真實建立時隻是先克隆這個template,如果模闆資料庫存在資料比如表中存在資料,存在索引等,那麼ENCODING,LC_COLLATE,LC_CTYPE三個參數需要你保持一緻,因為不一緻可能會由于編碼字元集不比對而導緻亂碼等問題;
5、 在建立資料庫或者資料庫表空間時都不能再一個事務快中(cannot be executed inside a transaction block);
6、 可以在指令行中執行createdb指令來建立資料庫,-O就是擁有者,-l相當于lc-collateand --lc-ctype,-T就是指定模闆,-E指的是字元集,dbname指的是資料庫名;
7、 建立資料庫例子:
Create database testdb1 owner=postgres
template= template1
ENCODING = 'UTF8'
LC_COLLATE='Chinese(Simplified)_People''s RepublicofChina.936'
LC_CTYPE = 'Chinese (Simplified)_People''sRepublic of China.936'
CONNECTION LIMIT = 1000;