我先說我沒用過 Eloquent 但剛換 pgsql 的人常犯的錯誤是忽略了 scheme(通常叫做 public 的那個東西)
default db or default schema有問題?
我看一下 Laravel 怎麼設定 schema .... 詭異
有設定 schema 和沒有設定時,error message 都相同
alter user USERYYY set search_path to xxx
疑似 role config 和 search path 的問題
用app那個user進去看試試能不能見到tables?
apmk: 使用
DB::select('select * from information_schema.tables')可以正確列出資料表
用 scheme.table 當表名的話查得到內容嗎
apmk: 好,我開始覺得要往人品方向 debug 了
使用 PDO 吃 Laravel env() 以後,下 query() 是正常的
使用 Laravel 的 DB::select()
select * from configs 是爛的,但是 select * from mydb.configs 可以正確執行
看來應該是 Laravel 沒有正確使用到 schema 設定?
那你可以試試看 apmk 說的 search_path
有在想,為什麼 Laravel 的文件都沒有提到這東西,但是好像不設定又不行 QQ
看看 config/database.php? 可能因為你用的不是預設 schema 所以得自己改,正常用預設(而且大部分人也只需要預設)的 public 就什麼都不用改
另一招我通常都是在connect hook之類就跑一句set search_path=xxx
apmk: 還沒弄好,睡前暫時先把想法記下來,然後放空休息,明天繼續
使用 PostgreSQL 的人應該不少,但好像沒什麼看到 Laravel + PostgreSQL的資料,覺得很奇怪
AI 就更奇怪了,MySQL 和 PostgreSQL 傻傻分不清
辦法三:如果沒有schema需要,全部搬回去public也行
之後預計在多個專案上共用 PostgreSQL,所以 schema 留著好像比較保險
搞定以後再來研究 performance tuning
除了 schema 你還有 database 可以用呀XD
PG的database是有著一點點隔離,沒記錯的話不同的database,在storage會是在不同的directory,也會可以有不一樣的default charset/collation之類,連transaction都不能跨DB。
mysql的database更像是pg的schema.
我忽略了tablespace了,這個才是真的控制資料檔案存放在哪個directory.... database會有一個default tablespace 配置但實際上可以table by table地設定用不同的tablespace
也太複雜了吧,該不會之後還要 chown 之類的 XD
但的確不同的app用database隔比較方便
記得權限設定也是按database比較方便 (schema也行不是不行)
都放在public schema就不會有這些麻煩事……的確app configuration support不是很優。
目前覺得比較方便的做法還是一個 user 一個 DB,有特殊需求再另外開權限
我看過的是不同 app 不同 db
同一個 app 的不同功能/元件會分不同 schema
例如說 auth 有自己的 schema,其他部分可以設成對 auth 有 readonly 但沒辦法寫
用 grant 不就可以設定成可讀不可寫嗎? O_Oa
zeroplex: 可以,就grant 整個schema嘛,那麼加減table也不需要調整