ITPub博客

首页 > Linux操作系统 > Linux操作系统 > postgresql数据库初始化

postgresql数据库初始化

原创 Linux操作系统 作者:greenteazsh 时间:2011-02-21 13:19:54 0 删除 编辑
        最近在处理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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-01-13

  • 博文量
    51
  • 访问量
    192203