日 落
1 months ago
請沒有人試過將 Laravel 的專案,從 MySQL 遷移到 PostgreSQL?

我用 pgloader 搬資料以後,psql 下指令檢查資料庫、資料表看起來都正常,但是修改 .env 設定以後,Laravel 使用 Eloquent 時顯示找不到資料表

權限問題?schema 問題? O_Oa
latest #35
scheme 名稱有對嗎?
我先說我沒用過 Eloquent 但剛換 pgsql 的人常犯的錯誤是忽略了 scheme(通常叫做 public 的那個東西)
default db or default schema有問題?
立即下載
日 落
1 months ago
我看一下 Laravel 怎麼設定 schema .... 詭異
日 落
1 months ago
有設定 schema 和沒有設定時,error message 都相同
alter user USERYYY set search_path to xxx
日 落
1 months ago
疑似 role config 和 search path 的問題
用app那個user進去看試試能不能見到tables?
日 落
1 months ago
apmk: 使用 DB::select('select * from information_schema.tables')
可以正確列出資料表
用 scheme.table 當表名的話查得到內容嗎
日 落
1 months ago
apmk: 好,我開始覺得要往人品方向 debug 了
日 落
1 months ago
使用 PDO 吃 Laravel env() 以後,下 query() 是正常的
日 落
1 months ago
使用 Laravel 的 DB::select()
select * from configs 是爛的,但是 select * from mydb.configs 可以正確執行

看來應該是 Laravel 沒有正確使用到 schema 設定?
那你可以試試看 apmk 說的 search_path
日 落
1 months ago
有在想,為什麼 Laravel 的文件都沒有提到這東西,但是好像不設定又不行 QQ
看看 config/database.php? 可能因為你用的不是預設 schema 所以得自己改,正常用預設(而且大部分人也只需要預設)的 public 就什麼都不用改
弄好了~?
另一招我通常都是在connect hook之類就跑一句set search_path=xxx
日 落
1 months ago
apmk: 還沒弄好,睡前暫時先把想法記下來,然後放空休息,明天繼續
日 落
1 months ago
使用 PostgreSQL 的人應該不少,但好像沒什麼看到 Laravel + PostgreSQL的資料,覺得很奇怪
AI 就更奇怪了,MySQL 和 PostgreSQL 傻傻分不清
apmk@重返人力市場
1 months ago @Edit 1 months ago
辦法三:如果沒有schema需要,全部搬回去public也行
日 落
1 months ago
之後預計在多個專案上共用 PostgreSQL,所以 schema 留著好像比較保險
搞定以後再來研究 performance tuning
除了 schema 你還有 database 可以用呀XD
日 落
1 months ago
突然覺得我還是先去 K 文件比較實在 XDD
PG的database是有著一點點隔離,沒記錯的話不同的database,在storage會是在不同的directory,也會可以有不一樣的default charset/collation之類,連transaction都不能跨DB。
mysql的database更像是pg的schema.
我忽略了tablespace了,這個才是真的控制資料檔案存放在哪個directory.... database會有一個default tablespace 配置但實際上可以table by table地設定用不同的tablespace
日 落
1 months ago
也太複雜了吧,該不會之後還要 chown 之類的 XD
但的確不同的app用database隔比較方便
記得權限設定也是按database比較方便 (schema也行不是不行)
都放在public schema就不會有這些麻煩事……的確app configuration support不是很優。
日 落
1 months ago
目前覺得比較方便的做法還是一個 user 一個 DB,有特殊需求再另外開權限
我看過的是不同 app 不同 db
同一個 app 的不同功能/元件會分不同 schema
日 落
1 months ago
我做過同一個 app 多個 DB,想死 Orz
例如說 auth 有自己的 schema,其他部分可以設成對 auth 有 readonly 但沒辦法寫
日 落
1 months ago
用 grant 不就可以設定成可讀不可寫嗎? O_Oa
zeroplex: 可以,就grant 整個schema嘛,那麼加減table也不需要調整
back to top