Postgresql:创建数据库 先有蛋?先有鸡?

如下:

第一个蛋? ..\share\下的postgres.bki、*.sql文件

initdb.exe 根据 ..\share\下的postgres.bki、*.sql文件 初始化数据库存储簇。这时该初始化簇包含3个数据库、一个supuser!

  • 默认调用initdb.exe的os用户(postgres)的同名用户连接数据库(postgres)
  • virgin(处女——纯洁啊)模板数据库tmeplate0:模板、不可以连接
  • 通用模板数据库template1:模板,可以连接
  • 默认调用initdb.exe的os用户(postgres)的同名的超级用户(postgres)

create database  new_db_name[template {template1(默认)|template_name}]

  • 这里的template_name指模板数据库可以是任何数据库。super用户和owner用户可以想怎么做就怎么做,否则只有模板数据库才可以让普通具有createdb权限的用户指定该数据库作为模板
  • 默认用户数据库:完全可以干掉!默认情况下,postgresql让template1默认数据库可以接受用户的连接!
  • 默认数据库可以重建,他就是普通用户数据库
  • template1模板数据库也可以干掉!不过你要知道,他基本上是最后一个可以删除的数据库了!如果没有其他正常的用户数据库,你就准备重新 initdb.exe吧!!!
  • template1数据库可以重建!必须要制定其他模板了!如果没有该库,就不能使用没有template子句的create database 了

数据库的两个属性标志

  • datistemplate:是否是可以供普通用户可以使用的模板数据库,对supuser 和 owner 用户无效
  • datallowconn:是否允许用户连接到该数据库!任何要作为模板进行clone的数据库必须是干净的,不能有其他连接!对对supuser 和 owner 用户也是如此!

create database db_name

[

  [with]

[owner [=] other_role_name]  --只有superuser才能指定其他owner。默认当前 role

[encoding [=] encoding_name]  --字符集编码,默认utf8

[template [=] template_db_name]  --(模板)数据库,默认template1

[tablespace [=] tablespace_name]  --默认表空间,默认pg_default

[connection limit [=] connlimit]  --运行的并非连接数,默认不限制(-1)

]

创建数据库必须有create database 权限 或 superuser

不允许在事务内执行

使用程序createdb.exe是对create database语句的封装

原文地址:https://www.cnblogs.com/jinzhenshui/p/1513064.html