🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 21.2\. 创建一个数据库 为了创建数据库,必须先运行PostgreSQL服务器(参阅[Section 17.3](#calibre_link-1097))。 数据库是用 SQL 命令[CREATE DATABASE](#calibre_link-111)创建的: ``` CREATE DATABASE _name_; ``` 这里的`_name_`遵循SQL标识符的一般规则。 当前角色自动成为此新数据库的所有者。同时,以后删除这个数据库也是这个用户的特权 (同时还会删除其中的所有对象,即使那些对象有不同的所有者也这样)。 创建数据库是一个有限制的操作。参阅[Section 20.2](#calibre_link-469)获取如何赋予权限的信息。 因为你需要与数据库服务器连接才能执行`CREATE DATABASE`命令, 那么还有一个问题是_第一个_数据库是怎样创建的? 第一个数据库总是由`initdb`命令在初始化数据存储区的时候创建的 (参阅[Section 17.2](#calibre_link-976))。这个数据库叫`postgres` 。因此要创建第一个"真正" 的数据库时你可以与`postgres`连接。 在数据库集群初始化时会创建另一个名为`template1` 的数据库。在创建一个新的数据库时, 实际上就是克隆(复制)了`template1`数据库。 这就意味着你对`template1`所做的任何修改都会传播到所有随后创建的数据库中。 因此,避免在`template1`中创建对象,除非你想要这些对象传播到每个新建的数据库中。 更多细节见[Section 21.3](#calibre_link-1266)。 另外,为了方便,你还可以在shell中用`createdb` 程序来创建新数据库: ``` createdb _dbname_ ``` `createdb`没变什么魔术,它和`postgres`连接并执行`CREATE DATABASE` 命令,就像上面描述的那样。[createdb](#calibre_link-40)的手册页包含使用它的细节。 注意不带任何参数调用`createdb`将创建与当前用户名同名的数据库。 > **Note:** [Chapter 19](#calibre_link-14)包含有关如何限制哪些用户可以连接某个特定数据库的信息。 有时候你想为其它人创建一个数据库,并且使他应该成为新数据库的所有者, 这样他就可以自己配置和管理这个数据库。要实现这个目标,使用下列命令中的一条: ``` CREATE DATABASE _dbname_ OWNER _rolename_; ``` 用于 SQL 环境,或: ``` createdb -O _rolename_ _dbname_ ``` 用于命令行。只有数据库的超级用户才能为其它用户创建数据库。