Skip to content

PostgreSQL创建数据库

概述

在PostgreSQL中,数据库是存储数据的顶级容器。创建数据库是开始使用PostgreSQL的第一步。本章介绍如何使用SQL命令和命令行工具创建数据库。

CREATE DATABASE语句

基本语法

sql
CREATE DATABASE database_name;

简单示例

sql
-- 创建一个简单的数据库
CREATE DATABASE myapp;

-- 创建数据库并指定所有者
CREATE DATABASE myapp OWNER postgres;

-- 创建数据库并指定编码
CREATE DATABASE myapp ENCODING 'UTF8';

完整语法

sql
CREATE DATABASE database_name
    [WITH]
    [OWNER = role_name]
    [TEMPLATE = template]
    [ENCODING = encoding]
    [LC_COLLATE = lc_collate]
    [LC_CTYPE = lc_ctype]
    [TABLESPACE = tablespace_name]
    [ALLOW_CONNECTIONS = true | false]
    [CONNECTION LIMIT = connlimit]
    [IS_TEMPLATE = true | false];

参数说明

参数说明
OWNER数据库所有者
TEMPLATE模板数据库,默认为template1
ENCODING字符编码,如UTF8
LC_COLLATE排序规则
LC_CTYPE字符分类
TABLESPACE表空间
ALLOW_CONNECTIONS是否允许连接
CONNECTION LIMIT最大连接数,-1表示无限制

使用命令行工具

createdb命令

bash
# 创建数据库
createdb myapp

# 指定所有者
createdb -O postgres myapp

# 指定编码
createdb -E UTF8 myapp

# 指定用户和主机
createdb -U postgres -h localhost myapp

# 创建并添加注释
createdb myapp "My Application Database"

使用psql

bash
# 通过psql执行SQL
psql -U postgres -c "CREATE DATABASE myapp;"

# 进入psql后创建
psql -U postgres
postgres=# CREATE DATABASE myapp;

实际应用示例

创建开发环境数据库

sql
-- 创建开发数据库
CREATE DATABASE myapp_dev
    OWNER = developer
    ENCODING = 'UTF8'
    LC_COLLATE = 'en_US.UTF-8'
    LC_CTYPE = 'en_US.UTF-8';

-- 创建测试数据库
CREATE DATABASE myapp_test
    OWNER = developer
    TEMPLATE = myapp_dev;

-- 创建生产数据库
CREATE DATABASE myapp_prod
    OWNER = admin
    CONNECTION LIMIT = 100;

查看数据库列表

sql
-- 使用SQL查询
SELECT datname FROM pg_database;

-- 或使用psql命令
\l

注意事项

  1. 命名规范:数据库名称应使用小写字母、数字和下划线
  2. 权限要求:需要CREATEDB权限或超级用户权限
  3. 编码选择:建议使用UTF8编码以支持多语言
  4. 模板数据库:默认从template1复制,可指定其他模板

常见问题

数据库已存在

sql
-- 使用IF NOT EXISTS避免错误
CREATE DATABASE IF NOT EXISTS myapp;

-- 或先检查再创建
SELECT datname FROM pg_database WHERE datname = 'myapp';

连接数限制

sql
-- 创建限制连接数的数据库
CREATE DATABASE limited_db CONNECTION LIMIT 10;

-- 修改现有数据库的连接限制
ALTER DATABASE myapp CONNECTION LIMIT 50;