終於成功了qq 先來說明一下我的架構,再整理到底遇到了什麼問題。
除了2、3、4 是n8n的問題,其他都是docker設定、權限的問題。
原因:ingest imgae 沒裝 PostgreSQL 驅動。
修正:新增 requirements.txt(含 psycopg[binary])與 Dockerfile,
pip install -r requirements.txt;重建容器。
requirements.txt
fastapi==0.115.0
uvicorn[standard]==0.30.6
psycopg[binary]==3.2.1
python-dotenv==1.0.1
原因:n8n 的 HTTP 節點把 Base URL / URL / Path 拼了好幾次。
修正:只用一個欄位:
URL = http://ingest_api:8000/ingest/price-points/bulk
其他不要再拼路徑;必要時加一個 middleware log 確認 REQ POST /ingest/price-points/bulk。
原因:我的 n8n 版本沒有 $uuid() helper。
修正:改用表達式{{ (Date.now().toString(36) + '-' + Math.random().toString(36).slice(2)) }}
原因:n8n 的「Using JSON」有時不會正確送出頂層就是陣列的 body。
修正:改用 RAW body:{{ JSON.stringify($json.payload) }}
並設 Content-Type:application/json。
原因:ingest_user 沒有對 prod.products 的 INSERT/UPDATE/SELECT 權限。
修正:在主庫授權:
GRANT USAGE ON SCHEMA prod TO ingest_user;
GRANT INSERT,UPDATE,SELECT ON prod.products TO ingest_user;
GRANT INSERT,SELECT ON prod.price_points TO ingest_user;
(序列權限另見下一條)
原因:插入 products 會讀取自增序列,sequence 權限獨立於表。
修正:
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA prod TO ingest_user;
並加
ALTER DEFAULT PRIVILEGES IN SCHEMA prod GRANT USAGE, SELECT ON SEQUENCES TO ingest_user;
原因:prod.trg_after_pp_ins() 觸發器會呼叫 prod.recompute_product_stats() 去 INSERT/UPDATE prod.product_stats;觸發器以 ingest_user 身分執行,但它沒權限。
修正:補權限:
GRANT INSERT,UPDATE,SELECT ON prod.product_stats TO ingest_user;
GRANT EXECUTE ON FUNCTION prod.recompute_product_stats(bigint) TO ingest_user;
進入ingest看log ,終於看到 200 了 !!
docker compose logs -f ingest
主要來說在全限那搞了一段時間,希望是不要再改了 ̿̿ ̿̿ ̿'̿’\̵͇̿̿\з=( ͠° ͟ʖ ͡°)=ε/̵͇̿̿/‘̿̿ ̿ ̿ ̿ ̿ ̿