postgresql資料庫初始化

greenteazsh發表於2011-02-21
        最近在處理pgsql資料庫中,發現資料檔案有缺失,估計應該是表儲存策略指令碼中出現了問題。檔案缺失較多,用重新匯出再匯入的方式處理,沒能解決。換用刪除資料表空間,rm -fr /usr/dbdata/logspace/*後,刪除了表空間,但pg_tables中還留存著此表空間中的資料表關聯資訊,不能進行徹底刪除,或者說是因為資料檔案的缺失,不能對資料表進行drop操作。這樣的話,如果沒有對資料庫進行過備份操作,只能初始化資料庫了initdb。初始化資料庫的方法和新建資料庫一樣,利用createdb的shell指令碼。在中間呼叫了initdb,可以對現有的資料庫中的資料進行清空操作。
        同時,還有一點需要注意,pgsql資料庫中如果刪除了一個表中的資料truncate table tablename;,則這個表所佔用的空間是可以釋放的,不同於oracle。所以,如果pgsql空間滿了,可以清空歷史資料表,但最好不要執行drop,容易出錯(未驗證,應該可以刪除歷史表)。
 
經常用到的語句:
1、vacuum full;  對資料庫空間進行清理。
2、sudo -u postgres /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data 啟動資料庫。
3、清理事務日誌,呼叫 sudo -u postgres /usr/local/pgsql/bin/pg_resetxlog -f /usr/local/pgsql/data
4、查詢出一部分所需要的資料表,在shell指令碼中,對這些資料表進行統一處理:
#!/bin/sh
PGBIN=/usr/local/pgsql/bin
$PGBIN/psql -U dbuser -d dbdir -c "select tablename from pg_tables where tablename like '%0%'" -t >/usr/local/data/tablename.log
while read line
 do
  if [ -n "$line" ] ;then
   $PGBIN/psql -U dbuser -d dbdir -c "drop table $line cascade;"
  fi
 done < /usr/local/data/tablename.log

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9521459/viewspace-687608/,如需轉載,請註明出處,否則將追究法律責任。

相關文章