<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>PostgreSQL on Peter.H's Full-Stack GAME</title><link>https://peter-notes.com/tags/postgresql/</link><description>Recent content in PostgreSQL on Peter.H's Full-Stack GAME</description><image><title>Peter.H's Full-Stack GAME</title><url>https://peter-notes.com/images/og-image.jpg</url><link>https://peter-notes.com/images/og-image.jpg</link></image><generator>Hugo</generator><language>zh-tw</language><lastBuildDate>Fri, 15 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://peter-notes.com/tags/postgresql/index.xml" rel="self" type="application/rss+xml"/><item><title>Schema 主表翻轉的 dual-write 過渡:一場不能 stop-the-world 的搬家</title><link>https://peter-notes.com/posts/schema-pivot-dual-write-migration/</link><pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate><guid>https://peter-notes.com/posts/schema-pivot-dual-write-migration/</guid><description>外部系統匯入的 customers 表跑了三年,現在想換成 SaaS 自己的 users 表為主。Stop-the-world 風險太高,dual-write 過渡是唯一可行解。本文拆解 3 階段 migration、partial cut-over、DISTINCT ON 去重、永久共存政策的設計考量與實戰踩坑。</description></item><item><title>Strapi v5's Silent populate Failure with Relation Filters</title><link>https://peter-notes.com/posts/strapi-v5-populate-silent-failure-with-relation-filters/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><guid>https://peter-notes.com/posts/strapi-v5-populate-silent-failure-with-relation-filters/</guid><description>A reproducible Strapi v5 bug: combining filters[relation][id][$eq] with populate[relation]=true silently returns null for the populated field — no error, no warning, just missing data. This post walks through the symptom, a curl reproduction, why it happens at the ORM layer, and a knex-based custom find controller that fixes it.</description></item><item><title>資料庫同步的隱藏陷阱：Link Table 的重要性</title><link>https://peter-notes.com/posts/database-sync-link-table-pitfall/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://peter-notes.com/posts/database-sync-link-table-pitfall/</guid><description>從一次 401 Unauthorized 錯誤出發，深入探討資料庫同步時容易遺漏的 Link Table 問題，以及如何預防這個常見的陷阱</description></item><item><title>AWS 跨區域遷移後的技術債清理：Strapi URL 的隱藏陷阱</title><link>https://peter-notes.com/posts/aws-s3-cleanup-pitfall/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid>https://peter-notes.com/posts/aws-s3-cleanup-pitfall/</guid><description>接手專案後發現 AWS 遷移不完整，每月多燒 $90。清理過程中發現 Strapi 的 URL 儲存機制比想像中複雜，記錄完整的排查與修復過程。</description></item><item><title>Kubernetes Staging 環境省錢術：從踩坑到正確實作</title><link>https://peter-notes.com/posts/kubernetes-staging-cost-saving-lesson/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate><guid>https://peter-notes.com/posts/kubernetes-staging-cost-saving-lesson/</guid><description>為了節省 Staging 環境費用撰寫開關腳本，卻因共用 nodegroup 導致意外。分享從踩坑到正確實作 nodeSelector 環境隔離的完整過程。</description></item><item><title>刪了 52 萬筆資料，為什麼硬碟空間沒變小？</title><link>https://peter-notes.com/posts/postgresql-vacuum-disk-space/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><guid>https://peter-notes.com/posts/postgresql-vacuum-disk-space/</guid><description>實戰經驗：刪除 52 萬筆通知資料後，資料表從 207MB 完全沒縮小。深入理解 PostgreSQL MVCC 機制，比較 SQLite 的差異，以及為什麼 VACUUM 是每個後端工程師必須知道的知識。</description></item><item><title>一次錯誤部署引發的 PostgreSQL Sequence 災難：為什麼使用者突然無法解鎖動畫？</title><link>https://peter-notes.com/posts/postgresql-sequence-disaster/</link><pubDate>Sun, 09 Nov 2025 00:00:00 +0000</pubDate><guid>https://peter-notes.com/posts/postgresql-sequence-disaster/</guid><description>記錄一次生產環境中因錯誤部署導致的 PostgreSQL Sequence 不同步問題，包含完整的問題分析、修復過程和預防措施</description></item><item><title>如何使用 psql 連線 AWS RDS PostgreSQL 並在容器與 Pod 中操作</title><link>https://peter-notes.com/posts/psql-connect-aws-rds-k8s/</link><pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate><guid>https://peter-notes.com/posts/psql-connect-aws-rds-k8s/</guid><description>深度解析如何透過各種方式連線 AWS RDS PostgreSQL，包含直接連線、SSH 隧道、Bastion Host、Docker 容器、Kubernetes Pod，以及完整的 psql 命令參考與安全最佳實踐</description></item></channel></rss>