PostgreSQL的兩個模板庫
PostgreSQL裡包含兩個標準系統資料庫,template0和template1。
建立資料庫時,CREATE DATABASE透過複製一個已有資料庫進行工作。預設情況下,它複製名為template1的標準系統資料庫 ,所以template1是建立新資料庫的模板,如果給template1資料庫增加物件,這些物件將被複製到後續建立的使用者資料庫中。
postgres=# \c template1 You are now connected to database "template1" as user "postgres". template1=# \dt List of relations Schema | Name | Type | Owner --------+------+-------+---------- public | ysl | table | postgres (1 row) template1=# create database sarah; CREATE DATABASE template1=# \c sarah You are now connected to database "sarah" as user "postgres". sarah=# \dt List of relations Schema | Name | Type | Owner --------+------+-------+---------- public | ysl | table | postgres (1 row)
系統裡還有名為template0的第二個標準系統資料庫。這個資料庫包含和template1初始內容一樣的資料,也就是說,只包含你的PostgreSQL版本預定義的標準物件。在資料庫被初始化之後,不應該對template0做任何修改。透過指示CREATE DATABASE使用template0取代template1進行複製,你可以建立一個“純淨的”使用者資料庫,它不會包含任何template1中的任何物件。 在恢復一個pg_dump轉儲時非常方便:在一個完全乾淨的資料庫中恢復以確保我們重建被轉儲資料庫的正確內容,而不會和任何現在可能已經被加入到template1中的物件衝突。
而且可以在複製template0時指定新的編碼和區域設定,但是template1的副本必須使用和它相同的設定。這是因為的template1可能包含編碼相關或區域相關的資料,而template0中沒有。
透過複製template0來建立一個資料庫的方法
1.SQL環境
sarah=# CREATE DATABASE dbname TEMPLATE template0;
2.shell
[postgres@ysla ~]$ createdb -T template0 dbname
對於每一個資料庫在pg_database中存在兩個有用的標誌: datistemplate和datallowconn列。datistemplate可以被設定來指示該資料庫是不是要作為CREATE DATABASE的模板。如果設定了這個標誌,那麼該資料庫可以被任何有 CREATEDB許可權的使用者克隆;如果沒有被設定,那麼只有超級使用者和該資料庫的擁有者可以克隆它。如果datallowconn為f,那麼將不允許與該資料庫建立任何新的連線(但已有的會話不會因為把該標誌設定為f而被中止)。template0通常被標記為datallowconn = f來阻止對它的修改。template0和template1通常總是被標記為datistemplate = t
sarah=# select * from pg_database; oid | datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | datminmxid | dattablespace | datacl -------+-----------+--------+----------+-------------+-------------+---------------+--------------+--------------+---------------+--------------+------------+---------------+-------------- 13593 | postgres | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 13592 | 480 | 1 | 1663 | 16385 | dcdpdb | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 13592 | 480 | 1 | 1663 | 1 | template1 | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | t | t | -1 | 13592 | 480 | 1 | 1663 | {=c/postgres,postgres=CTc/postgres} 13592 | template0 | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | t | f | -1 | 13592 | 480 | 1 | 1663 | {=c/postgres,postgres=CTc/postgres} 24583 | sarah | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 13592 | 480 | 1 | 1663 | (5 rows)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2781171/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL string_to_array group by 兩個列報錯SQL
- 「狐狸」的模板庫
- 3 個 Python 模板庫比較Python
- PostgreSQL如何比較兩個表的定義是否一致SQL
- postgresql 比較兩個時間差大於 N個小時SQL
- [提問交流]我想做一個 一個後臺,兩個站點(兩套模板),uc同步登陸,
- 管理叢集資料庫的兩個使用者與兩個命令資料庫
- 同步寫兩個資料庫資料庫
- rac 建立兩個資料庫資料庫
- 比較兩個資料庫的差異資料庫
- PostgreSQL模擬兩個update語句死鎖-利用掃描方法SQL
- PostgreSQL pg_stat_statements模板介紹和部署SQL
- Python模板庫Mako的用法Python
- 推薦兩個好用的 React 庫以及使用後的感想React
- Django 構建模板form表單的兩種方法DjangoORM
- DBCA靜默建庫中的兩個小問題
- 比對兩個資料庫的差異:Java篇資料庫Java
- SQL Server資料庫日誌清除的兩個方法SQLServer資料庫
- PostgreSQL:資料庫的選擇SQL資料庫
- DocHub文庫PC端模板,文庫系統PC端模板
- Postgresql注入研究三兩事(續集)SQL
- Go的http庫處理multipart的兩個問題解決GoHTTP
- 如何比較兩個資料庫表結構的不同資料庫
- 推薦兩個好用的開源庫(圖片和UDP)UDP
- Oracle dblink比較兩個庫中的表欄位Oracle
- 迫於 250,來自薦兩個 golang 庫Golang
- 20 個免費的 Bootstrap 模板boot
- 【LISTENER】一個資料庫配置兩個監聽埠號資料庫
- MySQL與PostgreSQL:該選擇哪個開源資料庫?MySql資料庫
- 比較兩個資料庫的表結構差異(轉)資料庫
- pg 資料庫HA 啟動指令碼的兩個假設資料庫指令碼
- 封裝ADO訪問資料庫的兩個類 (轉)封裝資料庫
- 一臺PC上git clone兩個不同郵箱的倉庫Git
- oracle的兩個bugOracle
- 如何連結兩個名字一樣動態庫
- 同步寫兩個資料庫--多執行緒資料庫執行緒
- vue 2.6 版本適應的元件庫模板Vue元件
- 兩套bootstrap3.2後臺模板樣式boot