diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@
 
 ## Unreleased
 
+## 0.1.3.2 — 2026-10-06
+
+### Fixed
+
+- Use a stable short effective-uid temporary root for PostgreSQL backend tests, retaining default stale-instance sweeping across shell sessions; require ephemeral-pg >=0.3.1 && <0.4.
+
+
 ## 0.1.3.1 — 2026-10-05
 
 - Tighten the `hasql` bound to `>=1.10 && <1.11`, matching the rest of the cohort (`mori://shinzui/keiro`, `mori://shinzui/kiroku`, `mori://shinzui/ephemeral-pg`). The old `>=1.9` floor was wrong: the backend already uses the 1.10-only API (`preparable`/`unpreparable`, `Hasql.Connection.Settings`). The test suite now bounds `mori://shinzui/ephemeral-pg/packages/ephemeral-pg` at `^>=0.3.1.0`. Bounds only; no source changed.
diff --git a/shikumi-cache-postgres.cabal b/shikumi-cache-postgres.cabal
--- a/shikumi-cache-postgres.cabal
+++ b/shikumi-cache-postgres.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.4
 name: shikumi-cache-postgres
-version: 0.1.3.1
+version: 0.1.3.2
 synopsis: Postgres-backed shikumi cache (EP-6)
 category: AI
 description:
@@ -63,15 +63,17 @@
   build-depends:
     baikai >=0.7.1.0 && <0.8,
     base,
+    directory,
     effectful,
-    ephemeral-pg ^>=0.3.1.0,
+    ephemeral-pg >=0.3.1 && <0.4,
     generic-lens,
     lens,
     shikumi ^>=0.4.0.0,
     shikumi-cache ^>=0.2.0.1,
-    shikumi-cache-postgres ^>=0.1.3.1,
+    shikumi-cache-postgres ^>=0.1.3.2,
     tasty,
     tasty-hunit,
     text,
     time,
+    unix,
     vector,
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -16,6 +16,7 @@
 import Control.Lens ((&), (.~))
 import Data.Generics.Labels ()
 import Data.IORef (IORef, modifyIORef', newIORef, readIORef)
+import Data.Monoid (Last (..))
 import Data.Text qualified as T
 import Data.Time.Clock (UTCTime)
 import Data.Vector qualified as V
@@ -28,9 +29,11 @@
 import Shikumi.Effect.Time (runTime)
 import Shikumi.Error (ShikumiError)
 import Shikumi.LLM (LLM (..), complete)
+import System.Directory (createDirectoryIfMissing)
 import System.Environment (lookupEnv)
 import System.Exit (exitFailure, exitSuccess)
 import System.IO (hPutStrLn, stderr)
+import System.Posix.User (getEffectiveUserID)
 import Test.Tasty (TestTree, defaultMain, testGroup)
 import Test.Tasty.HUnit (testCase, (@?=))
 
@@ -61,7 +64,11 @@
 
 main :: IO ()
 main = do
-  started <- Pg.start Pg.defaultConfig
+  uid <- getEffectiveUserID
+  let root = "/tmp/ephpg-shikumi-" <> show uid
+  createDirectoryIfMissing True root
+  let config = Pg.defaultConfig {Pg.temporaryRoot = Last (Just root)}
+  started <- Pg.start config
   case started of
     Left err -> skip (T.unpack (Pg.renderStartError err))
     Right db -> do
