news 2026/4/18 12:02:31

PostgreSQL 18 远程操作实战:从连接到备份的操作实践记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PostgreSQL 18 远程操作实战:从连接到备份的操作实践记录

PostgreSQL 18 远程操作实战:从连接到备份的完整指南

引言

作为一名开发者,掌握数据库的基本操作是必备技能之一。最近我在 Ubuntu 24.04 服务器上安装了 PostgreSQL 18,为了更好地理解和掌握 PostgreSQL 的日常管理和操作,我进行了一系列的远程操作演示。本文将详细记录整个操作过程,包括遇到的问题、解决方案和学习心得,希望对大家有所帮助。

操作环境

  • 服务器:Ubuntu 24.04
  • PostgreSQL 版本:18.1
  • 客户端:Windows 10 + PowerShell 7
  • 连接方式:SSH

操作过程

1. 远程连接到服务器

首先,我需要通过 SSH 连接到远程服务器。使用以下命令:

ssh-t -p<端口号><用户名>@<服务器IP地址>

其中:

  • -t参数:强制分配伪终端
  • -p <端口号>:指定 SSH 端口
  • <用户名>@<服务器IP地址>:用户名和服务器 IP 地址

2. 查看 PostgreSQL 版本

连接到服务器后,我需要查看 PostgreSQL 的版本信息,确认安装是否成功:

echo"<sudo密码>"|sudo-S -u postgres psql -c'SELECT version();'

输出结果:

PostgreSQL 18.1 (Ubuntu 18.1-1.pgdg24.04+2) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, 64-bit

3. 查看数据库列表

接下来,我需要查看当前服务器上的数据库列表:

echo"<sudo密码>"|sudo-S -u postgres psql -c'\l'

输出结果显示了 4 个数据库:postgres、template0、template1 和之前创建的 test_db。

4. 创建新数据库

我将创建一个名为 demo_db 的新数据库用于演示:

echo"<sudo密码>"|sudo-S -u postgres psql -c'CREATE DATABASE demo_db;'

输出结果:

CREATE DATABASE

5. 创建表

现在,我将在 demo_db 数据库中创建一个名为 users 的表:

echo"<sudo密码>"|sudo-S -u postgres psql -d demo_db -c'CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);'

输出结果:

CREATE TABLE

6. 插入数据

创建表后,我需要插入一些测试数据。这是我遇到问题最多的一步,主要是因为引号转义的问题。

第一次尝试(失败)

echo"<登录密码>"|sudo-S -u postgres psql -d demo_db -c'INSERT INTO users (name, email) VALUES (\"张三\",\"zhangsan@example.com\"), (\"李四\",\"lisi@example.com\"), (\"王五\",\"wangwu@example.com\");'

错误信息:

ERROR: syntax error at or near "\""

第二次尝试(失败)

echo"<登录密码>"|sudo-S -u postgres psql -d demo_db -c'INSERT INTO users (name, email) VALUES (`"张三`",`"zhangsan@example.com`"), (`"李四`",`"lisi@example.com`"), (`"王五`",`"wangwu@example.com`");'

错误信息:

ERROR: column "张三" does not exist

最终解决方案

在 PowerShell 中,正确的单引号转义方式是使用两个单引号''表示一个单引号'

ssh-t -p<端口号><用户名>@<服务器IP地址>'echo "<sudo密码>" | sudo -S -u postgres psql -d demo_db -c "INSERT INTO users (name, email) VALUES (''test'',''test@example.com'');"'

输出结果:

INSERT 0 1

7. 查询数据

插入数据成功后,我需要查询数据,验证插入是否成功:

ssh-t -p<端口号><用户名>@<服务器IP地址>'echo "<sudo密码>" | sudo -S -u postgres psql -d demo_db -c "SELECT * FROM users;"'

输出结果:

id | name | email | created_at ----+------+------------------+---------------------------- 1 | test | test@example.com | 2025-12-16 07:14:19.664278 (1 row)

8. 创建索引

为了提高查询性能,我需要为 users 表的 email 字段创建索引:

ssh-t -p<端口号><用户名>@<服务器IP地址>'echo "<sudo密码>" | sudo -S -u postgres psql -d demo_db -c "CREATE INDEX idx_users_email ON users(email);"'

输出结果:

CREATE INDEX

9. 更新数据

现在,我需要更新一条数据,测试更新操作:

ssh-t -p<端口号><用户名>@<服务器IP地址>'echo "<sudo密码>" | sudo -S -u postgres psql -d demo_db -c "UPDATE users SET name = ''updated_test''WHEREid=1;"'

输出结果:

UPDATE 1

10. 验证更新结果

更新数据后,我需要验证更新是否成功:

ssh-t -p<端口号><用户名>@<服务器IP地址>'echo "<sudo密码>" | sudo -S -u postgres psql -d demo_db -c "SELECT * FROM users;"'

输出结果:

id | name | email | created_at ----+--------------+------------------+---------------------------- 1 | updated_test | test@example.com | 2025-12-16 07:14:19.664278 (1 row)

11. 数据库备份

最后,我需要演示数据库备份操作,这是数据库管理中的重要环节:

ssh-t -p<端口号><用户名>@<服务器IP地址>'echo "<sudo密码>" | sudo -S -u postgres bash -c "pg_dump -d demo_db -f /tmp/demo_db_backup.sql && echo\"Backup completed successfully!\""'

遇到的问题与解决方案

问题1:引号转义问题

现象:在 PowerShell 中执行包含单引号的 SQL 语句时,出现语法错误。

解决方案:在 PowerShell 中,正确的单引号转义方式是使用两个单引号''表示一个单引号'

问题2:连接被关闭

现象:执行某些命令时,SSH 连接突然被关闭。

解决方案:确保命令语法正确,特别是引号和括号的匹配。

问题3:权限问题

现象:执行某些命令时,出现权限拒绝的错误。

解决方案:使用sudo命令获取管理员权限,并确保使用正确的用户名和密码。

学习总结

通过这次 PostgreSQL 18 远程操作实战,我学到了以下知识和经验:

1. PostgreSQL 基本操作

  • 如何连接到远程 PostgreSQL 数据库
  • 如何创建和管理数据库
  • 如何创建和管理表
  • 如何插入、查询、更新和删除数据
  • 如何创建索引
  • 如何备份数据库

2. 远程操作技巧

  • 在 PowerShell 中正确转义引号
  • 使用sudo命令获取管理员权限
  • 使用ssh -t参数强制分配伪终端
  • 使用psql -c参数执行单行 SQL 命令
  • 使用psql -d参数指定数据库

3. 最佳实践

  • 始终使用参数化查询,避免 SQL 注入
  • 为经常查询的字段创建索引,提高查询性能
  • 定期备份数据库,确保数据安全
  • 使用事务管理复杂操作,确保数据一致性
  • 遵循命名规范,提高代码可读性和可维护性

结语

PostgreSQL 是一款功能强大的开源关系型数据库,掌握其基本操作对于开发者来说是非常重要的。通过这次远程操作实战,我不仅掌握了 PostgreSQL 的基本操作,还学会了如何在远程环境中高效地管理和操作数据库。

在实际工作中,我们还需要学习更多高级特性,如事务管理、性能优化、高可用配置等。希望这篇博客能够帮助大家更好地理解和掌握 PostgreSQL 的基本操作,为后续的学习和工作打下坚实的基础。

最后,感谢大家的阅读,如有任何问题或建议,欢迎在评论区留言讨论!

参考资源

  • PostgreSQL 官方文档
  • PostgreSQL 中文文档
  • PostgreSQL 教程
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:41:13

基于STM32单片机直流电压表电流表功率高精度过压过流蓝牙无线APP/WiFi无线APP/摄像头视频监控/云平台设计S360

STM32-S360-高精度电压(0.01V)电流(0.01A)功率多接口过压过流过载声光提醒OLED屏阈值按键(无线方式选择)产品功能描述&#xff1a;本系统由STM32F103C8T6单片机核心板、OLED屏、&#xff08;无线蓝牙/无线WIFI/无线视频监控/联网云平台模块-可选&#xff09;、DC测试口、被测电…

作者头像 李华
网站建设 2026/4/18 7:05:17

基于STM32单片机快递柜储物柜扫码GSM短信灯光消毒蓝牙无线APP/WiFi无线APP/摄像头视频监控/云平台设计S370

STM32-S370-存取柜GSM短信光敏灯光消毒取件码二维码语音播报存件手机号录入后台数据4舵机OLED屏按键(无线方式选择)产品功能描述&#xff1a;本系统由STM32F103C8T6单片机核心板、OLED屏、&#xff08;无线蓝牙/无线WIFI/无线视频监控/联网云平台模块-可选&#xff09;、键盘部…

作者头像 李华
网站建设 2026/4/17 12:09:54

渗透实战 | HTB Bastion靶场入门必备:从SMB到MRemoteNG的提权之路

介绍 Bastion 是一个简单级 Windows 盒子&#xff0c;内置一个 VHD&#xff08;虚拟硬盘&#xff09;镜像&#xff0c;可以提取凭证。登录后&#xff0c;发现安装了MRemoteNG软件&#xff0c;该软件不安全存储密码&#xff0c;可以提取凭证。 url:https://app.hackthebox.com…

作者头像 李华
网站建设 2026/4/17 14:50:37

Langflow:拖拽式AI工作流,重塑编程体验

Langflow&#xff1a;用图形化方式重塑 AI 编程体验 在大模型应用开发的前线&#xff0c;一个现实问题正日益凸显&#xff1a;即便有了 LangChain 这样强大的框架&#xff0c;构建一个多步骤、带记忆、能调用工具的智能体&#xff0c;依然需要写大量样板代码。开发者常常陷入组…

作者头像 李华
网站建设 2026/4/18 3:09:11

LobeChat能否支持WebSocket?实时通信协议测试

LobeChat能否支持WebSocket&#xff1f;实时通信协议测试 在构建现代AI聊天应用时&#xff0c;一个核心挑战是如何让用户“看见”模型思考的过程——不是等待几秒后突然弹出整段回复&#xff0c;而是像有人打字一样&#xff0c;逐字浮现。这种体验的背后&#xff0c;离不开高效…

作者头像 李华
网站建设 2026/4/17 22:34:08

虚拟机vmware linux的piix4_smbus : SMBus Host Controller not enabled

发生原因&#xff1a;虚拟机内存不足了&#xff0c;无法正常启动 解决措施: 进入命令行模式&#xff0c;删除部分内容后重新启动 实操&#xff1a; 按住shift重新启动&#xff1a; 选择“Advanced options for Ubuntu” 选择“… (recovery mode)”这项&#xff1a; 选择“…

作者头像 李华