我想让postgresql恢复到原来的空状态。
在 Ubuntu 上:
$ sudo service postgresql stop
$ sudo apt-get purge postgresql*
其次是
$ sudo apt-get install postgresql
这正是我想要的,但有没有不那么残酷的方法来做同样的事情?
我实际上想要做的是检查我是否可以从头开始重新创建数据库。
答案1
使用初始化数据库,创建一个新的 PostgreSQL 数据库集群。其中还包括 postgresql.conf 和 pg_hba.conf。
答案2
首先,我必须猜一下你所说的“重置”是什么意思!
如果您指的是数据,那么您可以使用已知的 SQL 语句删除所有数据库drop database
。
如果您指的是配置,我认为除非您有旧的备份,否则删除它并使用新的配置文件重新安装它是一个好方法。
答案3
就像 Khaled 所说的那样,您只需发出drop database
、drop user
等语句即可清除对初始数据库所做的所有更改。
对于数据库配置,您可能只对将文件置于版本控制之下(git、svn &co)感兴趣。
对于 Subversion,你可以做这样的事情:
安装 Subversion
$ sudo apt-get install subversion
设置存储库
$ mkdir ~/pgsqlsvn
$ svnadmin create
停止服务
$ sudo service postgresql stop
最初填充存储库:
$ cd /etc/postgresql
$ sudo svn co file:///home/you/pgsqlsvn ./
$ sudo svn add *
$ sudo svn commit
之后恢复配置
每次你需要重置到初始数据库配置时,你只需
$ sudo svn update /etc/postgresql -r 1
答案4
为了扩展 Frank 的回答,我已完成以下操作以在 Ubuntu 14.04 LTS 上重置 PostgreSQL:
sudo service postgresql stop
sudo bash # Root permissions to move the data folder
mv /var/lib/postgresql/9.3/main ~ # Move the database for safety
logout
sudo -u postgres bash
mkdir /var/lib/postgresql/9.3/main
/usr/lib/postgresql/9.3/bin/initdb -D /var/lib/postgresql/9.3/main
sudo service postgresql start
请注意,它initdb
不在系统路径中,如果您尝试运行它,Ubuntu 会建议您安装扩展包。但是,如果您安装了服务器本身,该命令仍然可用 - 只是隐藏了。
我希望这可以针对其他版本的 PostgreSQL 进行修改 - 只需对路径中的版本号进行一些修改即可。
我可能可以通过以身份登录来缩短此过程,以便postgres
移动旧数据库并创建新数据库。请注意,initdb
将拒绝以 root 身份运行,因此以身份运行postgres
是有意义的。
(这种重置对于从其他系统(例如 MySQL)转到此数据库平台的人们很有用。一旦添加了角色、用户、授权、默认权限等,就很难记住哪个命令有什么效果。擦除并重试可以消除所有疑虑)。