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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 3 個 Python 模板庫比較Python
- PostgreSQL string_to_array group by 兩個列報錯SQL
- 「狐狸」的模板庫
- [提問交流]我想做一個 一個後臺,兩個站點(兩套模板),uc同步登陸,
- 模板庫
- PostgreSQL模擬兩個update語句死鎖-利用掃描方法SQL
- 推薦兩個好用的 React 庫以及使用後的感想React
- PostgreSQL建立自增主鍵的兩種方法SQL
- Git同步兩個遠端倉庫的分支程式碼Git
- PostgreSQL:資料庫的選擇SQL資料庫
- Go的http庫處理multipart的兩個問題解決GoHTTP
- DocHub文庫PC端模板,文庫系統PC端模板
- 如何比較兩個資料庫表結構的不同資料庫
- 易優的前端模板模板是在哪個目錄?前端
- Django 構建模板form表單的兩種方法DjangoORM
- MVC 檢視不使用模板頁的兩種方法MVC
- immer 和useImmer兩個庫有啥區別
- 迫於 250,來自薦兩個 golang 庫Golang
- 個人模板
- 一臺PC上git clone兩個不同郵箱的倉庫Git
- 如何連結兩個名字一樣動態庫
- oracle Mysql PostgreSQL 資料庫的對比OracleMySql資料庫
- PostgreSQL:資料庫的建立與刪除SQL資料庫
- 一百個人心中有100個哈姆雷特,一百個國產資料庫廠家眼裡只有兩個優秀的資料庫資料庫
- vue 2.6 版本適應的元件庫模板Vue元件
- IvorySQL王志斌—IvorySQL,一個基於PostgreSQL的相容Oracle的開源資料庫SQLOracle資料庫
- postgresql 資料庫基本操作SQL資料庫
- postgresql資料庫利用方式SQL資料庫
- PostgreSQL-資料庫命令SQL資料庫
- postgresql 資料庫基本管理SQL資料庫
- 資料庫_SQL-PostgreSQL資料庫SQL
- java比較mysql兩個資料庫中差異JavaMySql資料庫
- Echarts一個圖例可以共用兩個或者兩個以上的餅圖Echarts
- 提高 PostgreSQL 插入效能的 5 個技巧SQL
- 6個提升PostgreSQL效能的小技巧SQL
- 【趙渝強老師】PostgreSQL的資料庫SQL資料庫
- PostgreSql資料庫的備份和恢復SQL資料庫
- Postgresql10資料庫之更改資料庫的名稱SQL資料庫