新手指南:在 Ubuntu 上安装 PostgreSQL 并通过 VS Code 连接及操作

本文档记录了一个初学者在 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_dbWITH 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

问题分析:
错误信息包含了两个问题:

  1. 密码验证失败: 输入的密码与数据库中存储的不一致。

  2. 数据库不存在: 在“DATABASE NAME”字段中,不小心粘贴了多余的中文指导语,导致数据库名称错误。

解决方案:

  1. 重置密码: 我们回到 Ubuntu 终端,通过临时修改 pg_hba.conf 文件允许 trust 认证,登录 psql 后使用 ALTER USER postgres WITH PASSWORD '...'; 命令重新设置了一个确定的密码。
    成功重置密码的终端输出:

    Generated text
          postgres=# ALTER USER postgres WITH PASSWORD '...';
    ALTER ROLE
  2. 修正连接信息: 回到 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 这一强大的工具来连接和管理数据库。这个过程虽然遇到了一些常见的初学者问题,但每解决一个问题,都让我们对数据库的工作原理有了更深的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87218.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二刷 苍穹外卖day10(含bug修改)

Spring Task Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑 cron表达式 一个字符串,通过cron表达式可以定义任务触发的时间 **构成规则:**分为6或7个域,由空格分隔开,每个域代表一个含义 …

Android Native 之 inputflinger进程分析

Android IMS原理解析 - 简书 Android 输入事件分发全流程梳理(一)_android input事件分发流程-CSDN博客 Android 输入事件分发全流程梳理(二)_android输入事件流程图-CSDN博客 inputflinger模块与surfaceflinger模块在同级目录…

Python实例题:基于 Flask 的在线聊天系统

目录 Python实例题 题目 要求: 解题思路: 代码实现: Python实例题 题目 基于 Flask 的在线聊天系统 要求: 使用 Flask 框架构建一个实时在线聊天系统,支持以下功能: 用户注册、登录和个人资料管理…

v-bind指令

好的,我们来学习 v-bind 指令。这个指令是理解 Vue 数据驱动思想的基石。 核心功能:v-bind 的作用是将一个或多个 HTML 元素的 attribute (属性) 或一个组件的 prop (属性) 动态地绑定到 Vue 实例的数据上。 简单来说,它在你的数据和 HTML …

【设计模式04】单例模式

前言 整个系统中只会出现要给实例,比如Spring中的Bean基本都是单例的 UML类图 无 代码示例 package com.sw.learn.pattern.B_create.c_singleton;public class Main {public static void main(String[] args) {// double check locking 线程安全懒加载 ⭐️ //…

飞算科技依托 JavaAI 核心技术,打造企业级智能开发全场景方案

在数字经济蓬勃发展的当下,企业对智能化开发的需求愈发迫切。飞算数智科技(深圳)有限公司(简称 “飞算科技”)作为自主创新型数字科技公司与国家级高新技术企业,凭借深厚的技术积累与创新能力,以…

20250701【二叉树公共祖先】|Leetcodehot100之236【pass】今天计划

20250701 思路与错误记录1.二叉树的数据结构与初始化1.1数据结构1.2 初始化 2.解题 完整代码今天做了什么 题目 思路与错误记录 1.二叉树的数据结构与初始化 1.1数据结构 1.2 初始化 根据列表,顺序存储构建二叉树 def build_tree(nodes, index0):# idx是root开始…

Web应用开发 --- Tips

Web应用开发 --- Tips General后端需要做参数校验代码风格和Api设计风格的一致性大于正确性数据入库时间应由后端记录在对Api修改的时候,要注意兼容情况,避免breaking change 索引对于查询字段,注意加索引对于唯一的字段,考虑加唯…

CSS 安装使用教程

一、CSS 简介 CSS(Cascading Style Sheets,层叠样式表)是用于为 HTML 页面添加样式的语言。通过 CSS 可以控制网页元素的颜色、布局、字体、动画等,是前端开发的三大核心技术之一(HTML、CSS、JavaScript)。…

机器学习中为什么要用混合精度训练

目录 FP16与显存占用关系机器学习中一般使用混合精度训练:FP16计算 FP32存储关键变量。 FP16与显存占用关系 显存(Video RAM,简称 VRAM)是显卡(GPU)专用的内存。 FP32(单精度浮点)&…

[附源码+数据库+毕业论文+答辩PPT]基于Spring+MyBatis+MySQL+Maven+vue实现的中小型企业财务管理系统,推荐!

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本中小型企业财务管理就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信…

华为云Flexus+DeepSeek征文 | 对接华为云ModelArts Studio大模型:AI赋能投资理财分析与决策

引言:AI金融,开启智能投资新时代​​ 随着人工智能技术的飞速发展,金融投资行业正迎来前所未有的变革。​​华为云ModelArts Studio​​结合​​Flexus高性能计算​​与​​DeepSeek大模型​​,为投资者提供更精准、更高效的投资…

从模型部署到AI平台:云原生环境下的大模型平台化演进路径

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:部署只是起点,平台才是终局 在过去一年,大语言模型的飞速发展推动了AI生产力浪潮。越来越多…

UI前端大数据可视化创新:利用AR/VR技术提升用户沉浸感

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在大数据与沉浸式技术高速发展的今天,传统二维数据可视化已难以满足复杂数据场景的…

MacOS 安装brew 国内源【超简洁步骤】

​/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"请输入序号:1

GENESIS64:全球知名的工业设备监控与可视化平台

一、概述 GENESIS64是一款由ICONICS开发的先进工业自动化软件平台,专为实现实时数据可视化、智能化监控及管理而设计。该平台采用模块化架构,具有高效的数据处理能力和灵活的扩展性,适用于各类工业环境,帮助企业实现自动化运营&a…

RNN(Recurrent Neural Network,循环神经网络)家族详解(RNN,LSTM,GRU)

文章目录 一、RNN基础:序列建模的核心思想1.1 RNN的本质与核心机制1.2 应用场景与结构分类 二、传统RNN:序列模型的起点2.1 内部结构与数学表达2.2 计算示例2.3 RNN在Pytorch中的API2.4 代码示例2.5 优缺点与梯度问题 三、LSTM:门控机制破解长…

多云密钥统一管理实战:CKMS对接阿里云/华为云密钥服务

某保险公司因阿里云KMS密钥与华为云密钥割裂管理,导致勒索事件中解密失败!据统计,73%企业因多云密钥分散管理引发数据恢复延迟(IDC 2024)。本文将详解安当CKMS统一纳管方案,实现跨云密钥全生命周期管控&…

光伏接入承载力计算仿真:基于图计算技术的自动建模技术研究

光伏接入承载力计算仿真:基于图计算技术的自动建模技术研究 一、 引言:挑战与机遇 光伏发电的大规模接入对中低压配电网的安全稳定运行带来了巨大挑战。精确评估电网对光伏的承载力(Hosting Capacity, HC)是保障消纳与安全的关键。传统承载力评估严重依赖电网仿真,而仿真…

如何在Excel中每隔几行取一行

如何在Excel中每隔几行取一行 摘要: Excel中快速实现每隔n行取一行的技巧:使用OFFSET函数配合ROW函数即可实现。公式为OFFSET(起始单元格,(ROW(A1)-1)*n,),其中n为间隔行数。例如从A2开始每2行取一行,公式为OFFSET(A2,(ROW(A1)-1)…