postgres模板資料庫

2022-05-24 11:15:13 字數 1630 閱讀 2446

create database 實際上是通過拷貝乙個現有的資料庫進行工作的。預設時,它拷貝名為 template1 的標準系統資料庫。所以該資料庫是建立新資料庫的"模板"。如果你給 template1 增加物件,這些物件將被拷貝到隨後建立的使用者資料庫中。這樣的行為允許節點對資料庫中的標準套件進行修改。比如,如果你把過程語言 pl/pgsql 安裝到 template1 裡,那麼你在建立使用者資料庫的時候它們就會自動可得,而不需要額外的動作。

系統裡還有名為 template0 的第二個標準系統資料庫,這個資料庫包含和 template1 初始時一樣的資料內容,也就是說,只包含標準的 postgresql 物件。在 initdb 之後,我們不應該對 template0 做任何修改。通過告訴 create database 使用 template0 而不是 template1 進行拷貝,你可以建立乙個"純淨"的使用者資料庫,它不會包含任何 template1 裡所特有的東西。這一點在恢復 pg_dump 轉儲的時候是非常方便的:轉儲指令碼應該在乙個純淨的資料庫中恢復以確保我們正確建立了被轉儲出的資料庫內容,而不和任何現在可能已經存在於 template1 中的附加物相衝突。

要通過拷貝 template0 的方法建立乙個資料庫,可使用下列方法之一:

create

database

dbname template template0;

createdb 

-t template0 dbname

前者用於 sql 環境,後者用於 shell 環境。

我們可以建立額外的模板資料庫,而且實際上我們可以在乙個集群中通過將 create

database 的模板宣告為相應的資料庫名拷貝任何資料庫。不過,我們必需明白,這個功能並非一般性的"copy

database"工具。實際上,在拷貝操作的過程中,源資料庫必需是空閒狀態(沒有正在處理的資料修改事務)。如果在

create database 開始的時候存在其它連線,那麼操作將會失敗,否則在

create database 的執行過程中新連線都將被鎖定,直到拷貝完成。

在 pg_database

裡有兩個有用的標誌可以用於每個資料庫:datistemplate 和

datallowconn 字段。datistemplate 表示該資料庫是準備用作 create

database 模板的。如果設定了這個標誌,那麼該資料庫可以由任何有 createdb 許可權的使用者轉殖;如果沒有設定,那麼只有超級使用者和該資料庫的所有者可以轉殖它。如果

datallowconn

為假,那麼將不允許與該資料庫發生任何新的連線(不過現有的會話不會因為把該標誌設定為假而被殺死)。template0 資料庫通常被標記為 datallowconn

= false 以避免對它的修改。template0 和

template1 都應該總是標記為 datistemplate = true 。

【注意】template1 和 template0 沒有任何特殊的狀態,除了 template1 是 create database

的預設源資料庫名之外。比如,我們可以刪除 template1 然後從

template0 中建立它而不會有任何不良效果。如果我們不小心在

template1 裡加了一堆垃圾,那麼我們就會建議做這樣的操作。

postgres資料庫部署遷移

條件 1.假設從linux a xiaoming 11.11.11.11 遷移至 b xiaoming 11.11.11.12 原資料庫old db,管理使用者xiaoming,密碼123456 2.假定使用者xiaoming,同時已經配置好了ssh到a和b,並且具備sudo許可權.該條未滿足,須學...

解除安裝安裝postgres資料庫

一 postgres的解除安裝 a.centos系統 1.檢視版本號和系統類別 cat etc redhat realease 2.如果是redhat yum install a yum 刪除軟體包 yum remove postgresql 或者 rpm qa grep postgresql 然後...

python連線postgres資料庫

第二步 引入 psycopg2 庫 import psycopg2第三步 連線postgres資料庫 conn psycopg2.connect database tables user postgres password host 127.0.0.1 port 5432 cur conn.curs...