零基础学习 PostgreSQL 创建数据库 – wiki基地


零基础学习 PostgreSQL:迈出第一步,创建你的第一个数据库

欢迎来到数据库的世界!如果你刚刚接触数据管理,并且对 PostgreSQL 这个强大而灵活的数据库系统感到好奇,那么你来对地方了。本文将为你揭开 PostgreSQL 的神秘面纱,特别是如何从零开始创建你的第一个数据库。我们将以最详细、最易懂的方式,一步步指导你完成这个至关重要的操作,即使你之前没有任何数据库或编程经验。

我们将不仅仅告诉你“怎么做”,更会深入解释“为什么这么做”,让你不仅能成功创建数据库,还能理解背后的原理和常用的最佳实践。

第一部分:数据库基础与 PostgreSQL 初识

1. 什么是数据库?

想象一下你家里的书架。每本书都有特定的分类(小说、历史、科学等),摆放在固定的位置,方便你查找。如果你想找到某一本特定的书,你会根据分类和书名去书架上寻找。

数据库也是类似的。它是一个用来组织、存储和管理大量结构化数据的系统。这些数据可以是文字、数字、日期,甚至图片或视频链接。数据库的主要目的是让你能够方便、快速地存入数据、查找数据、修改数据和删除数据

没有数据库,管理大量信息将变得异常困难。比如,一个大型电商网站需要存储成千上万的商品信息、用户账户、订单记录、支付信息等等。如果这些数据只是随意地放在文件中,查找一个用户的历史订单将是一场噩梦。数据库系统通过提供结构化的方式和高效的查询工具,解决了这个问题。

2. 什么是关系型数据库管理系统 (RDBMS)?

我们刚才描述的数据库通常指的是关系型数据库。在关系型数据库中,数据被组织成一系列的表(Tables)。每个表都由行(Rows)列(Columns)组成,类似于电子表格。

  • 列(Columns)定义了数据的类型,比如“商品名称”、“价格”、“库存数量”。
  • 行(Rows)代表了具体的记录,比如“一台 MacBook Pro 14 英寸”、“15999”、“50”。

不同表之间可以通过共同的列建立关系(Relationships),比如“订单表”可以通过“用户ID”关联到“用户表”。

管理这些关系型数据库的软件系统就叫做关系型数据库管理系统 (RDBMS)。常见的 RDBMS 包括 PostgreSQL, MySQL, Oracle, SQL Server 等。

3. 为什么选择 PostgreSQL?

PostgreSQL (发音为 “Post-gres-Q-L”) 是一个非常流行、功能强大、稳定且开源的关系型数据库系统。选择 PostgreSQL 有很多理由:

  • 功能丰富: 它支持几乎所有的 SQL 标准(SQL 是用于管理关系型数据库的语言),并且提供了许多高级特性,如复杂查询、事务处理、并发控制、数据完整性约束等等。
  • 高度可靠: PostgreSQL 在数据一致性和可靠性方面享有盛誉,广泛应用于关键业务系统。
  • 可扩展性强: 可以处理从小型项目到大型企业级应用的数据需求。
  • 开源免费: 你可以免费使用它,甚至可以查看和修改其源代码。这得益于其宽松的开源许可证。
  • 社区活跃: 拥有一个庞大的开发者和用户社区,提供了丰富的文档和支持。
  • 支持多种数据类型: 除了基本的数据类型(文本、数字、日期),它还支持数组、JSON、XML、几何数据等复杂类型。

对于初学者而言,选择 PostgreSQL 是一个非常明智的决定。学习 PostgreSQL 的基础知识,将为你打开数据世界的大门。

第二部分:准备工作 – 安装与连接

在创建数据库之前,你需要先安装 PostgreSQL 服务器,并且有一个能够连接到它的客户端工具。

1. 安装 PostgreSQL

安装过程因操作系统的不同而有所差异。

  • Windows: 通常可以从 PostgreSQL 官方网站下载安装包,按照向导一步步安装即可。安装过程中会让你设置管理员用户 (postgres) 的密码,务必记住这个密码。安装程序通常会包含 pgAdmin 客户端工具。
  • macOS: 可以使用 Homebrew 包管理器 (brew install postgresql),或者下载官方提供的安装器。
  • Linux: 大多数 Linux 发行版的软件仓库中都提供了 PostgreSQL,可以使用对应的包管理器进行安装(如 sudo apt-get install postgresqlsudo yum install postgresql-server)。

注意: 安装的具体步骤请参考 PostgreSQL 官方文档或针对你操作系统的具体安装教程。本文假设你已经成功安装了 PostgreSQL 服务器。

2. 连接到 PostgreSQL

安装完成后,你需要一个客户端工具来与 PostgreSQL 服务器交互。主要有两种方式:

  • 命令行工具:psql
    psql 是 PostgreSQL 自带的命令行客户端。它非常强大,适合执行 SQL 命令和管理数据库。对于初学者,命令行可能看起来有点吓人,但它是理解数据库交互方式的直接途径。
  • 图形用户界面 (GUI) 工具:pgAdmin
    pgAdmin 是一个流行的开源 PostgreSQL GUI 管理工具,通常随 Windows 安装包一同安装。它提供了友好的界面,让你可以通过点击按钮和填写表单来执行任务,无需记忆复杂的命令。这对于初学者来说非常友好。

我们将主要使用这两种工具来演示创建数据库的过程。

连接方式概述:

  • psql: 打开终端或命令提示符,输入 psql -U postgres。系统会提示你输入 postgres 用户的密码。成功后,你会看到 postgres=# 或类似的提示符,表示你已经连接到了服务器的默认数据库 postgres
  • pgAdmin: 打开 pgAdmin 应用程序。它会尝试连接到本地安装的 PostgreSQL 服务器。你可能需要输入连接密码。连接成功后,你会看到服务器树状结构。

第三部分:理解 PostgreSQL 中的“数据库”概念

在 PostgreSQL 中,“数据库”是一个顶级的容器。一个 PostgreSQL 服务器实例可以包含多个独立的数据库。每个数据库都有自己的:

  • Schemas (模式): 数据库内部的组织单元,可以用来分组表、视图、函数等对象。默认情况下,每个数据库至少有一个名为 public 的 schema。
  • Tables (表): 存储实际数据的地方。
  • Indices (索引): 用于加速数据检索。
  • Functions & Procedures (函数与存储过程): 执行特定任务的代码块。
  • Users & Roles (用户与角色): 管理谁可以访问数据库以及他们有什么权限。

当你连接到 PostgreSQL 服务器时,通常会先指定连接到哪个具体的数据库。例如,当你第一次使用 psql -U postgres 连接时,默认是连接到名为 postgres 的这个数据库。这个 postgres 数据库通常用于管理目的,不建议在其中存储你的应用数据。你需要创建自己的数据库来存放你的应用数据。

第四部分:创建数据库 – 方法一:使用 SQL 命令 (psql)

使用 SQL 命令是创建数据库最直接的方式,也是最能让你理解背后原理的方式。我们将使用 psql 命令行工具来执行 SQL 命令。

1. 连接到服务器的默认数据库

打开终端或命令提示符,输入连接命令(假设你的 PostgreSQL 用户是 postgres,服务器在你本地):

bash
psql -U postgres

按回车键,系统会要求输入密码。输入 postgres 用户对应的密码,然后按回车。

如果连接成功,你会看到类似下面的提示符:

“`
psql (你的PostgreSQL版本号)
Type “help” for help.

postgres=#
“`

postgres=# 表示你当前连接到了名为 postgres 的数据库,并且已经准备好接受 SQL 命令或 psql 特有的元命令(以 \ 开头)。

2. 查看当前已有的数据库 (可选)

在创建新数据库之前,你可以先看看服务器上已经有哪些数据库。使用 psql 的元命令 \l (list database):

sql
postgres=# \l

按回车键,你会看到一个列表,类似这样:

List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)

这个列表显示了数据库的名称、拥有者、编码等信息。postgrestemplate0template1 是安装 PostgreSQL 时默认创建的数据库。

  • postgres: 默认的管理数据库。
  • template0: 一个干净的模板数据库,不包含任何用户添加的对象。用于创建其他数据库时作为最原始的基础。
  • template1: 也是一个模板数据库,默认情况下是 template0 的副本,但可以在其中添加对象(比如常用的函数或扩展),以便基于 template1 创建的新数据库自动包含这些对象。我们通常基于 template0template1 创建新数据库

3. 执行 CREATE DATABASE 命令

创建数据库的 SQL 命令非常简单:

sql
CREATE DATABASE database_name;

  • CREATE DATABASE: 这是 SQL 关键字,表示我们要创建一个新的数据库。
  • database_name: 这是你给新数据库起的名字。数据库名字必须是唯一的,并且遵循一些命名规则(通常建议使用小写字母、数字和下划线,避免特殊字符和 SQL 关键字)。
  • ;: SQL 命令的结束符。

假设我们想创建一个名为 mydatabase 的数据库,你可以在 postgres=# 提示符后输入:

sql
postgres=# CREATE DATABASE mydatabase;

按下回车键。如果一切顺利,系统不会输出太多信息,可能只显示 CREATE DATABASE,或者没有任何输出直接回到 postgres=# 提示符。

4. 验证数据库是否创建成功

创建命令执行后,再次使用 \l 元命令来查看数据库列表:

sql
postgres=# \l

你应该能在列表中看到你刚刚创建的 mydatabase

List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
mydatabase| postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template0 | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows) -- 注意这里变成了 4 行,说明新数据库被添加了

恭喜你!你已经成功地使用 SQL 命令创建了你的第一个 PostgreSQL 数据库。

5. 断开 psql 连接

完成操作后,你可以输入 \q 元命令来退出 psql

sql
postgres=# \q

按回车键即可退出。

6. CREATE DATABASE 命令的更多选项

上面的例子使用了最简单的语法。CREATE DATABASE 命令还有很多可选参数,用于更精细地控制新数据库的特性。了解这些参数对于创建适合特定需求的数据库非常重要。

完整语法大致如下:

sql
CREATE DATABASE name
[ [ WITH ] [ OWNER = user_name ]
[ TEMPLATE = template ]
[ ENCODING = encoding ]
[ LC_COLLATE = lc_collate ]
[ LC_CTYPE = lc_ctype ]
[ TABLESPACE = tablespace_name ]
[ CONNECTION LIMIT = connlimit ] ] ;

让我们逐一解释这些常用选项:

  • OWNER = user_name:

    • 作用: 指定新数据库的拥有者。默认情况下,创建数据库的用户(例如 postgres)会成为拥有者。
    • 为什么重要: 数据库拥有者对该数据库拥有所有权限。在实际应用中,通常会为不同的应用或用户创建专门的数据库用户,并将数据库的所有权赋予对应的用户,而不是使用默认的 postgres 用户。这有助于权限管理和安全性。
    • 例子: 创建一个由用户 app_user 拥有的数据库 app_db
      sql
      CREATE DATABASE app_db OWNER = app_user;

      注意:在执行此命令前,必须先确保 app_user 用户(或角色)已经存在于 PostgreSQL 服务器中。
  • TEMPLATE = template:

    • 作用: 指定创建新数据库时要使用的模板数据库。新数据库将是模板数据库的一个副本。
    • 为什么重要: PostgreSQL 默认提供了 template0template1
      • template0 是一个“干净”的模板,不包含任何用户自定义的对象。基于 template0 创建的数据库会忽略模板数据库中的 locale 设置(如 LC_COLLATE, LC_CTYPE),而是使用 CREATE DATABASE 命令中指定的 locale 设置,如果没有指定,则继承服务器的默认设置。这对于需要特定排序规则和字符分类的新数据库非常有用,可以避免从 template1 继承可能不一致的 locale 设置。
      • template1template0 的一个副本,并且默认安装的一些扩展或工具可能会添加到 template1 中。基于 template1 创建数据库会复制 template1 中的所有对象(表、函数、索引、扩展等)以及其 locale 设置。如果你希望新数据库默认包含一些常用的扩展或对象,可以先把它们安装或创建到 template1 中。
    • 最佳实践: 通常建议使用 template0 作为模板来创建新的生产数据库,这样可以确保新数据库是一个干净的基础,避免从 template1 意外复制不想要的对象或设置。只有当你明确知道并需要从 template1 继承某些特性时,才使用 template1
    • 例子: 基于 template0 创建数据库 my_clean_db
      sql
      CREATE DATABASE my_clean_db TEMPLATE = template0;
  • ENCODING = encoding:

    • 作用: 指定新数据库使用的字符集编码。字符集决定了数据库能存储和处理哪些文字符号(如中文、英文、日文、表情符号等)。
    • 为什么重要: 确保数据库能够正确存储和显示你的数据所使用的所有字符。不同的编码支持不同的字符范围。
    • 常见编码: UTF8 是目前最推荐和最常用的编码。它支持几乎所有的国际字符,兼容性最好。其他常见的编码包括 GBK (主要用于简体中文)、LATIN1 (主要用于西欧语言) 等。
    • 注意: 数据库创建后通常不能修改编码,所以选择正确的编码非常重要。如果你不确定,选择 UTF8 几乎总是正确的。
    • 例子: 创建一个使用 UTF8 编码的数据库 my_utf8_db
      sql
      CREATE DATABASE my_utf8_db ENCODING = 'UTF8';

      单引号 'UTF8' 是推荐的写法,但有时也可以不加引号。
  • LC_COLLATE = lc_collateLC_CTYPE = lc_ctype:

    • 作用:
      • LC_COLLATE: 指定数据库使用的排序规则。它决定了字符串比较和排序的方式(例如,字母 ‘a’ 和 ‘A’ 在排序时如何处理,或者带有重音符号的字符如何排序)。
      • LC_CTYPE: 指定数据库使用的字符分类规则。它决定了哪些字符被认为是字母、数字、大小写转换等。
    • 为什么重要: 影响到使用 ORDER BY 子句进行排序、使用 LIKE 进行模式匹配以及字符串函数的行为。选择合适的 locale 对于支持特定语言的文本处理非常关键。
    • 取值: 取决于你的操作系统支持的 locale。例如,en_US.UTF-8 (美式英语 UTF-8), zh_CN.UTF8 (简体中文 UTF-8) 等。
    • 默认值: 如果不指定,通常继承自模板数据库(如果使用 template1)或服务器的环境设置(如果使用 template0 或未指定模板)。
    • 注意: 这两个设置一旦设置,通常不能修改。并且,LC_COLLATELC_CTYPE 通常需要设置为相同的值,并且与 ENCODING 兼容。如果使用 template0 作为模板,强烈建议显式指定 ENCODING, LC_COLLATE, 和 LC_CTYPE,以确保数据库设置的可移植性和明确性。
    • 例子: 创建一个使用 UTF8 编码和简体中文排序/分类规则的数据库 my_chinese_db (假设你的系统支持 zh_CN.UTF8 locale):
      sql
      CREATE DATABASE my_chinese_db ENCODING = 'UTF8' LC_COLLATE = 'zh_CN.UTF8' LC_CTYPE = 'zh_CN.UTF8';
  • TABLESPACE = tablespace_name:

    • 作用: 指定新数据库的默认表空间。表空间是 PostgreSQL 中一个更高级的概念,它允许你将数据库对象(如表、索引)存储在文件系统的特定位置。
    • 为什么重要: 用于管理磁盘空间或优化 I/O 性能。比如,你可以将常用的、需要快速访问的数据存储在 SSD 硬盘对应的表空间,而将归档数据存储在普通硬盘对应的表空间。对于初学者,通常不需要设置这个选项,数据库会使用默认的表空间。
    • 例子: 创建一个使用名为 fast_ssd_space 表空间的数据库 my_fast_db (假设 fast_ssd_space 表空间已经存在):
      sql
      CREATE DATABASE my_fast_db TABLESPACE = fast_ssd_space;
  • CONNECTION LIMIT = connlimit:

    • 作用: 限制可以同时连接到该数据库的并发连接数。-1 表示没有限制。
    • 为什么重要: 用于控制单个数据库占用的服务器资源,防止某个数据库耗尽所有连接资源,影响其他数据库或服务器的稳定性。对于不同的应用或用户,可以设置不同的连接限制。
    • 例子: 创建一个最大连接数限制为 100 的数据库 my_limited_conn_db
      sql
      CREATE DATABASE my_limited_conn_db CONNECTION LIMIT = 100;

综合示例: 创建一个名为 my_app_db 的数据库,拥有者为 app_owner,基于 template0,使用 UTF8 编码,美式英语排序和分类,最大连接数为 50:

sql
CREATE DATABASE my_app_db
OWNER = app_owner
TEMPLATE = template0
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.UTF8'
LC_CTYPE = 'en_US.UTF8'
CONNECTION LIMIT = 50;

(再次提醒:执行前请确保 app_owner 用户已存在,且你的系统支持 en_US.UTF8 locale)

通过 psql 使用 SQL 命令创建数据库,让你对底层的操作有了清晰的认识。接下来,我们看看如何使用更直观的 GUI 工具 pgAdmin 来完成同样的操作。

第五部分:创建数据库 – 方法二:使用 GUI 工具 (pgAdmin)

对于许多初学者来说,使用图形界面工具更加直观和方便。pgAdmin 是一个非常流行的选择。

1. 打开 pgAdmin 并连接到服务器

启动 pgAdmin 应用程序。它通常会提示你输入 master password(这是你第一次启动 pgAdmin 时设置的密码,用于保护存储在 pgAdmin 中的服务器连接密码)。

连接成功后,在左侧的浏览器面板中,你会看到你的服务器连接。展开你的服务器(通常是 PostgreSQL <版本号>)。如果提示需要连接密码,输入 postgres 用户的密码或其他你设置的具有创建数据库权限的用户的密码。

成功连接后,你会看到服务器下的各种节点,包括 Databases

2. 导航到“数据库”节点

在左侧的浏览器面板中,找到并选中 Databases 节点。

3. 打开创建数据库对话框

选中 Databases 节点后,你有几种方式打开创建数据库的界面:

  • 方式一 (推荐): 右键点击 Databases 节点,在弹出的菜单中选择 Create -> Database...
  • 方式二: 在 pgAdmin 顶部菜单栏中,选择 Object -> Create -> Database...

无论哪种方式,都会弹出一个名为 Create - Database 的对话框。

4. 填写数据库信息

这个对话框通常包含多个选项卡。最重要的是 GeneralDefinition 选项卡。

  • General (通用) 选项卡:

    • Database (数据库): 在这里输入你要创建的数据库的名称。例如:my_pgadmin_db
    • Owner (拥有者): 从下拉列表中选择数据库的拥有者。默认通常是 postgres。你可以选择已存在的其他用户或角色。点击下拉箭头会显示当前服务器上的所有用户和角色。
    • Comment (注释): 可以输入一段关于这个数据库的描述或注释,可选。
  • Definition (定义) 选项卡:

    • Encoding (编码): 从下拉列表中选择字符集编码。强烈建议选择 UTF8
    • Template (模板): 从下拉列表中选择用于创建新数据库的模板。通常选择 template0template1。如前所述,建议使用 template0 以获得一个干净的环境。
    • Collation (排序规则): 从下拉列表中选择排序规则 (LC_COLLATE)。选择一个与你的数据语言和编码兼容的 locale。例如 en_US.UTF8zh_CN.UTF8 (如果可用)。
    • Character Type (字符类型): 从下拉列表中选择字符类型 (LC_CTYPE)。通常应与 Collation 相同。
    • Tablespace (表空间): 从下拉列表中选择默认表空间。对于初学者,可以使用默认值(通常是 pg_default)。
    • Connection Limit (连接限制): 输入允许的最大并发连接数。-1 表示无限制。可以根据需要设置一个合理的数字。

其他选项卡(如 Security, Advanced, Parameters)通常包含更高级的设置,对于零基础创建第一个数据库来说,可以暂时忽略,使用默认值即可。

填写完 GeneralDefinition 选项卡中的必要信息后,对话框可能看起来像这样(示例值):

  • General:
    • Database: my_pgadmin_db
    • Owner: postgres (或你选择的其他用户)
  • Definition:
    • Encoding: UTF8
    • Template: template0
    • Collation: en_US.UTF8 (或你需要的 locale)
    • Character Type: en_US.UTF8 (或你需要的 locale)
    • Tablespace: pg_default
    • Connection Limit: -1 (或你需要的数字)

5. 查看 SQL (可选)

在 pgAdmin 的创建对话框底部,通常有一个 SQL 选项卡。点击它可以查看 pgAdmin 将要执行的 CREATE DATABASE SQL 命令。这对于理解图形界面操作背后对应的 SQL 语句非常有帮助。

6. 创建数据库

点击对话框右下角的 Save 按钮。

pgAdmin 会发送对应的 SQL 命令到 PostgreSQL 服务器执行。如果创建成功,对话框会关闭,并且你在左侧的浏览器面板中展开 Databases 节点时,会看到你新创建的数据库 my_pgadmin_db 出现在列表中。

7. 验证数据库是否创建成功

在 pgAdmin 左侧浏览器面板中,展开 Databases 节点。你应该能看到你刚刚创建的数据库名称出现在列表里。点击它,可以在右侧的仪表盘中查看数据库的属性和状态。

恭喜!你已经成功地使用 pgAdmin 这个 GUI 工具创建了你的第一个 PostgreSQL 数据库。

第六部分:理解关键属性的含义和选择

前面我们提到了 ENCODING, LC_COLLATE, LC_CTYPE, TEMPLATE, OWNER 等属性。对于零基础的同学,这些可能有些抽象。这里我们再次强调其中几个最关键的,并提供一些选择建议。

1. 字符集编码 (Encoding)

  • 作用: 决定了数据库能够存储和处理哪些字符。
  • 为什么重要: 如果你的数据包含特定语言(如中文、日文、俄文)或特殊符号(如表情符号),你选择的编码必须能够表示这些字符。
  • 推荐选择: UTF8。它是事实上的国际标准,支持几乎所有语言的字符。使用 UTF8 可以避免许多字符乱码问题,特别是当你处理多语言数据时。除非你有非常特殊的历史遗留系统需求,否则总是选择 UTF8。

2. 排序规则 (LC_COLLATE) 和 字符类型 (LC_CTYPE)

  • 作用: 决定了文本的排序方式和字符的分类方式。
  • 为什么重要: 例如,在某些语言中,带有重音符号的字母可能被视为与不带重音符号的字母相同,或者大小写字母在排序时有特定的规则。LC_COLLATE 影响 ORDER BY 的结果。LC_CTYPE 影响 UPPER(), LOWER(), ISUPPER(), ISDIGIT() 等函数的行为。
  • 选择建议:
    • 选择与你的数据主要使用的语言和地区对应的 locale。例如,对于简体中文用户,zh_CN.UTF8 是一个常见的选择(前提是你的操作系统支持)。对于大多数英文场景,en_US.UTF8C (表示标准的 C 语言 locale,通常是字节序排序) 都可以。
    • 确保 LC_COLLATELC_CTYPE 设置为相同的值。
    • 确保选择的 locale 与 ENCODING 兼容。
    • 注意: template0 创建的数据库会忽略模板的 locale,而是使用创建命令中指定的 locale 或服务器默认值。template1 创建的数据库会继承 template1 的 locale。如果你需要特定的、非服务器默认的 locale,并且希望避免从 template1 继承潜在问题,那么使用 template0 并显式指定 LC_COLLATELC_CTYPE 是最好的方法。如果你的需求很简单,服务器默认值通常也能工作。

3. 模板 (Template)

  • 作用: 决定了新数据库是基于哪个现有数据库复制而来。
  • 选择建议:
    • template0 (推荐用于创建干净的、有特定 locale 需求的数据库): 这是一个原始模板,几乎是空的,并且在创建时会忽略 locale 设置,允许你设置独立的 locale。这最适合创建全新的、用于特定应用的数据库。
    • template1 (适用于需要在新数据库中包含某些默认对象或扩展的场景): 复制 template1 的所有内容。如果你在 template1 中安装了一些常用扩展(如 uuid-ossp 生成 UUID),并且希望所有新数据库都自动拥有这些扩展,那么可以使用 template1。但请注意它会继承 template1 的 locale 设置。

4. 拥有者 (Owner)

  • 作用: 决定了哪个用户或角色对数据库拥有最高权限。
  • 选择建议:
    • 不要总是使用 postgres: postgres 用户是数据库的超级用户,拥有最高权限。直接将所有数据库都赋予 postgres 会带来安全风险。
    • 创建专门的用户/角色: 最佳实践是为每个应用或每个数据库创建一个专门的数据库用户或角色,并将数据库的拥有权赋予这个专用的用户。然后你的应用就使用这个专用的用户去连接和操作数据库。这样可以实现权限隔离。
    • 例子: 如果你的网站应用需要连接数据库,你应该创建一个 website_app_user 用户,然后创建 website_db 数据库,并将 website_db 的拥有者设置为 website_app_user

理解这些属性的选择,能够帮助你创建更健壮、更安全、更符合需求的数据库。

第七部分:常见问题与故障排除

  • 错误:database "mydatabase" already exists

    • 原因: 你试图创建的数据库名称已经存在了。
    • 解决: 换一个不同的数据库名称。
  • 错误:role "app_user" does not exist

    • 原因: 你在 OWNER 选项中指定的用户或角色不存在。
    • 解决: 先使用 CREATE USER app_user WITH PASSWORD 'your_password';CREATE ROLE app_user; 等命令创建该用户或角色,然后再创建数据库。
  • 错误:encoding "..." does not match server's locale "..." 或与 locale (LC_COLLATE/LC_CTYPE) 相关的错误。

    • 原因: 你指定的编码或 locale 不兼容或你的操作系统不支持。或者你使用了 template1 模板,而指定的 locale 与 template1 的 locale 不一致。
    • 解决:
      • 检查你输入的编码和 locale 名称是否正确。
      • 确认你的操作系统支持你指定的 locale (可以在命令行输入 locale -a 查看支持的 locale 列表)。
      • 确保 ENCODING, LC_COLLATE, LC_CTYPE 相互兼容。
      • 如果你需要自定义 locale,强烈建议使用 TEMPLATE = template0
  • 权限不足错误 (e.g., permission denied for database template0)

    • 原因: 当前连接的用户没有足够的权限来创建数据库或使用指定的模板。
    • 解决: 确保你使用的用户(例如 postgres)是超级用户或者具有 CREATEDB 权限。如果你使用的是非超级用户,需要由超级用户为其授予 CREATEDB 权限:ALTER ROLE your_user CREATEDB;
  • 忘记 psql 连接密码

    • 解决: 如果是 postgres 用户的密码忘了,你可能需要通过修改 PostgreSQL 的配置文件 (pg_hba.conf) 来允许无密码本地连接(通常是设置 methodtrustpeer),然后连接进去重置密码。这是一个更高级的操作,请谨慎进行并参考官方文档。

第八部分:创建数据库后的下一步

成功创建数据库只是万里长征的第一步。接下来,你需要:

  1. 连接到新数据库:

    • psql 中:使用元命令 \c database_name (e.g., \c mydatabase)。你会看到提示符变成 mydatabase=#
    • 在 pgAdmin 中:直接点击左侧浏览器面板中的新数据库名称即可连接。
    • 在应用程序代码中:你的连接字符串或配置需要指定连接到你创建的这个数据库名称。
  2. 创建用户和角色 (如果之前没有为该数据库创建专属拥有者): 为了安全和权限管理,为你将在新数据库中进行操作的应用或用户创建专门的角色。

  3. 创建 Schema (模式): 在数据库内部,可以使用 CREATE SCHEMA schema_name; 命令来组织你的数据对象。默认有一个 public schema。在复杂的应用中,使用不同的 schema 可以更好地组织数据。

  4. 创建表 (Tables): 这是真正存储数据的地方。使用 CREATE TABLE table_name (...) 命令来定义你的表结构(列名、数据类型、约束等)。这是数据库学习的核心内容之一。

  5. 学习 SQL: 掌握 SELECT, INSERT, UPDATE, DELETE 等 SQL 语句,以便向表中存入、查询和修改数据。

总结

恭喜你走出了学习 PostgreSQL 的第一步!你现在应该已经理解了数据库的基本概念,了解了 PostgreSQL 的优势,并且掌握了使用 SQL 命令 (CREATE DATABASE) 和 GUI 工具 (pgAdmin) 创建数据库的详细步骤,以及如何选择合适的数据库属性。

创建数据库是构建任何基于 PostgreSQL 应用的基础。通过实践,你会越来越熟悉这个过程。不要害怕尝试,多查阅 PostgreSQL 的官方文档,它是最权威的学习资源。

数据库的世界广阔而精彩,充满了各种强大的功能等你探索。继续你的学习之旅,掌握表的创建、数据的操作、索引的优化、用户的管理等等,你将能够构建和管理复杂的数据系统。

祝你学习顺利!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部