当前位置: 首页 > news >正文

Docker - 04 - 连接postgres容器并迁移

临时用 Compose 暴露的端口(与 .env 密码一致)

宿主机通过 Compose 映射5433:5432连接容器内 PostgreSQL,下文示例统一使用localhost:5433

1. 临时环境变量

$env:DATABASE_URL="postgresql://postgres:你的密码@localhost:5433/nodejs_study?schema=public"

这行只在 当前 PowerShell 窗口(Windows 本机) 里设了一个临时环境变量。

环境变量优先级

情况用哪个
PowerShell 里先执行了 $env:DATABASE_URL=…用进程里的(当前终端临时值)
没设 $env:DATABASE_URL.env加载(dotenv/config)
两个都有进程环境变量优先(dotenv 通常不覆盖已存在的变量)

✅ 实际流程

实际发生的是:

┌─────────────────────────────────────────────────────────┐ │ Windows 本机 │ │ │ │ ① npx prisma migrate deploy 启动(Node 进程,在本机) │ │ ② 读 DATABASE_URL → 知道连 localhost:5433 │ │ ③ 读项目里 prisma/migrations/*.sql(文件在本机磁盘) │ │ ④ 通过 TCP 连 localhost:5433 │ │ │ │ │ ▼ Docker 端口转发 │ │ ┌──────────────────────────────────┐ │ │ │ nodejs-postgres 容器 │ │ │ │ PostgreSQL 监听 容器内 :5432 │ │ │ │ 数据存在 pgdata 卷里 │ │ │ │ │ │ │ │ ⑤ 收到 SQL:CREATE TABLE ... │ │ │ │ ⑥ 在容器自己的库里执行、存数据 │ │ │ └──────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘

迁移程序在本机,SQL 文件在本机,容器只负责执行 SQL 并保存结果。

Prisma CLI 会:

  • DATABASE_URL连上数据库
  • _prisma_migrations表,看哪些迁移已执行
  • 对未执行的迁移,逐条发送 SQL
  • 记录迁移历史

2. 迁移 SQL 能建表,不会产生数据

只有 migration 文件里 本身写了 数据类 SQL,deploy 时才会在 当前DATABASE_URL连的那套库 里产生数据,例如:

INSERTINTO"Product"(name,price,stock)VALUES('示例',9.99,100);

3. 理解 compose 文件及环境变量的关系

1. compose 里,是为了初始化一个数据库

environment:POSTGRES_USER:postgresPOSTGRES_PASSWORD:yiyi199836# 与 .env 里 DATABASE_URL 密码一致POSTGRES_DB:nodejs_study

对应docker-compose.yml中的端口映射:

ports:-"5433:5432"# 宿主机 5433 → 容器内 5432

2. 临时环境变量

$env:DATABASE_URL="postgresql://postgres:密码@localhost:5433/nodejs_study?schema=public"

执行这个命令是为了能够连接上面数据库,然后迁移的时候执行 SQL 语句建表;
如果不在当前进程中设置环境变量,就要改.env文件,连接容器或者 PostgreSQL,连哪个就要端口号、账户、密码改成对应的。

http://www.jsqmd.com/news/1108838/

相关文章:

  • C#实现微信小程序订阅消息推送
  • 番茄小说下载器终极指南:免费打造个人小说图书馆的完整解决方案
  • PCF8591与PIC18F4553的嵌入式信号处理方案
  • LP5812与MKV58实现RGB灯光控制方案详解
  • 汽车电子主动散热系统设计与DRV8213应用实践
  • Display Driver Uninstaller:彻底解决显卡驱动问题的专业工具
  • HTTPie与DRF高效API测试:从入门到自动化集成
  • 3步快速集成QQ音乐API:打造个性化音乐服务的完整指南
  • 福州大学设计考研哪个机构上岸率最高
  • 【软考论文稳过结构法】:基于2178份真实答卷统计出的6类高频失分结构+对应修正公式
  • 3分钟掌握LaTeX公式转换Word的终极解决方案:免费高效一键完成
  • LTC6904与PIC18F MCU实现高精度可编程时钟设计
  • 番茄小说下载器完整指南:三步打造你的私人小说图书馆
  • C++20:数据序列处理的新工具Ranges(上)
  • 一线观察:长期体验后,长春奥迪改装行业的真实表现
  • Si4732与STM32L151ZD在数字广播接收中的优化设计
  • Adobe-GenP:一站式智能激活工具深度解析与实战指南
  • 2026年汕头美食地图:探寻地道特产,哪家更胜一筹?
  • STM32F407与INA196实现工业4-20mA信号采集方案
  • 铠侠积极推动AI推理时代的快速发展
  • 大模型微调工程:七阶段方法论与实践指南
  • Selenium+Java自动化测试环境搭建与实战:从零到项目化实践
  • 嵌入式安全通信:A5000加密芯片与PIC18F46K42的TLS优化实践
  • STM32L031K6驱动IN-PC55TBTRGB灯带的智能照明方案
  • AI高保真原型工具有哪些?产品经理必看推荐
  • EXOR HMI控件动画开发实战:从零实现一个旋转加载动画
  • Kali365 设备代码钓鱼对微软 365 无密码体系的威胁与防御技术研究
  • 零基础看懂CRM:全方位拆解客户关系管理系统
  • 基于Harness理念的AI驱动UI自动化工程体系设计与实践
  • 除了 Excel,中小律所怎么选更轻量的案件管理系统