本文档记录了一个初学者在 Ubuntu 系统上安装、配置 PostgreSQL 数据库,并使用 Visual Studio Code (VS Code) 作为客户端进行连接和操作的全过程。其中包含了遇到的常见错误、分析和最终的解决方案,旨在为新手提供一个清晰、可复现的操作路径。
最终目标
创建一个用于记录客服对话的数据库表,该表包含以下列:
客户输入 (文本)
客户输入时间 (日期+时间)
机器人输出 (文本)
机器人输出时间 (日期+时间)
第一步:安装与登录 PostgreSQL
遇到的问题 1:在终端直接输入 SQL 命令
最初,我们尝试直接在 Ubuntu 的命令行终端中运行 SQL 命令 CREATE DATABASE。
报错信息:
Generated text
(base) tony@tony-MS-7D48:~/下载$ CREATE DATABASE water_service_db
CREATE: 未找到命令
问题分析:
CREATE DATABASE 是 SQL 语言的命令,必须在数据库的客户端(如 psql)中执行。Ubuntu 的命令行终端 (Bash) 无法识别 SQL 命令,因此报告“未找到命令”。
解决方案:
必须先登录到 PostgreSQL 的 psql 客户端,然后再执行 SQL 语句。
遇到的问题 2:postgres 用户不存在
我们尝试使用标准命令 sudo -u postgres psql 登录,但遇到了新问题。
报错信息:
Generated text
(base) tony@tony-MS-7D48:~/下载$ systemctl status postgresql
Unit postgresql.service could not be found.
问题分析:
这个错误明确指出 PostgreSQL 服务没有被安装在系统上,因此也不存在管理数据库所需的 postgres 系统用户。
解决方案:
通过 apt 包管理器安装 PostgreSQL。
Generated bash
sudo apt update
sudo apt install postgresql postgresql-contrib
安装过程会自动创建 postgres 用户并启动数据库服务。
第二步:创建数据库
遇到的问题 3:排序规则不兼容
安装成功后,我们再次尝试创建数据库,但遇到了关于排序规则 (collation) 的错误。
报错信息:
Generated text
postgres=# CREATE DATABASE water_service_db ...
ERROR: new collation (en_US.UTF-8) is incompatible with the collation of the template database (zh_CN.UTF-8)
HINT: Use the same collation as in the template database, or use template0 as template.
问题分析:
默认情况下,PostgreSQL 通过复制 template1 数据库来创建新数据库。我们的系统环境导致 template1 的排序规则是 zh_CN.UTF-8,而我们想创建的数据库指定了不兼容的 en_US.UTF-8。
解决方案:
根据错误提示,我们在 CREATE DATABASE 命令中明确指定使用一个干净的、不受环境影响的模板 template0。
成功的命令与输出:
Generated sql
CREATE DATABASE water_service_db
WITH
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8'
TEMPLATE = template0;
输出:
Generated text
CREATE DATABASE
第三步:通过 VS Code 连接数据库
遇到的问题 4:使用了错误的数据库连接器
我们最初尝试在 VS Code 中连接,但遇到了一个提到 "SQL Server" 的错误。
报错信息:
Generated text
Connection error: connection failed: ... FATAL: ... (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)
问题分析:
我们错误地使用了为 Microsoft SQL Server 设计的连接器来尝试连接 PostgreSQL 数据库。它们使用不同的协议和端口,因此连接失败。
解决方案:
在 VS Code 中安装了正确的 "PostgreSQL by Microsoft" 扩展,并确保在 POSTGRESQL 分类下创建新连接。
遇到的问题 5:密码验证失败或数据库名错误
切换到正确的连接器后,我们又遇到了新的连接错误。
报错信息:
Generated text
Connection error: ... FATAL: password authentication failed for user "postgres" ... FATAL: database "water_service_db 进行这些修改后..." does not exist
问题分析:
错误信息包含了两个问题:
密码验证失败: 输入的密码与数据库中存储的不一致。
数据库不存在: 在“DATABASE NAME”字段中,不小心粘贴了多余的中文指导语,导致数据库名称错误。
解决方案:
重置密码: 我们回到 Ubuntu 终端,通过临时修改 pg_hba.conf 文件允许 trust 认证,登录 psql 后使用 ALTER USER postgres WITH PASSWORD '...'; 命令重新设置了一个确定的密码。
Generated text
成功重置密码的终端输出:postgres=# ALTER USER postgres WITH PASSWORD '...'; ALTER ROLE
修正连接信息: 回到 VS Code 连接界面,输入了正确的新密码,并清空了“DATABASE NAME”字段,只保留了准确的数据库名 water_service_db。
第四步:在 VS Code 中创建表和操作数据
遇到的问题 6:在错误的数据库中找不到表
成功连接后,我们在左侧的数据库浏览器中展开 postgres 数据库的 Tables 文件夹,发现是空的。
问题分析:
我们的 users 表是创建在 water_service_db 数据库中的,而不是系统默认的 postgres 数据库。
解决方案:
在数据库浏览器中正确地展开 water_service_db -> Schemas -> public -> Tables。
遇到的问题 7:time_records 表未出现
按照正确路径展开后,只看到了 users 表,没有看到 time_records 表。
问题分析:
很可能是在之前的 SQL 编辑器中,CREATE TABLE time_records 命令没有被选中并成功执行。
解决方案:
回到 SQL 编辑器,重新选中并执行了创建 time_records 表的命令,然后刷新左侧的 Tables 文件夹视图。
最终成果:创建、插入并查询数据
根据最终需求,我们创建了一个不含 id 列的 conversations 表,并成功插入了一条模拟对话记录。
1. 创建表:
Generated sql
CREATE TABLE conversations (
user_input TEXT NOT NULL,
user_input_time TIMESTAMP WITH TIME ZONE NOT NULL,
bot_output TEXT,
bot_output_time TIMESTAMP WITH TIME ZONE
);
2. 插入数据:
Generated sql
INSERT INTO conversations (user_input, user_input_time, bot_output, bot_output_time)
VALUES
(
'你好,我想查询一下我的余额。',
'2024-05-31 10:00:00',
'好的,请输入您的卡号。',
'2024-05-31 10:00:02'
);
3. 查询结果:
执行 SELECT * FROM conversations; 后,我们在 VS Code 的结果面板中得到了我们期望的最终成果。
最终成果的查询结果:
Generated code
+------------------------------------+-------------------------------+----------------------------------+-------------------------------+
| user_input | user_input_time | bot_output | bot_output_time |
+------------------------------------+-------------------------------+----------------------------------+-------------------------------+
| 你好,我想查询一下我的余额。 | 2024-05-31 10:00:00+08 | 好的,请输入您的卡号。 | 2024-05-31 10:00:02+08 |
+------------------------------------+-------------------------------+----------------------------------+-------------------------------+
(1 row)
总结:
通过这一系列的操作和排错,我们成功地在 Ubuntu 系统上搭建了 PostgreSQL 环境,并学会了如何使用 VS Code 这一强大的工具来连接和管理数据库。这个过程虽然遇到了一些常见的初学者问题,但每解决一个问题,都让我们对数据库的工作原理有了更深的理解。