diff --git a/engine.go b/engine.go index 52ec1e3f..0eff164a 100644 --- a/engine.go +++ b/engine.go @@ -546,21 +546,34 @@ func (engine *Engine) tableName(beanOrTableName interface{}) (string, error) { return "", errors.New("bean should be a struct or struct's point") } +func (engine *Engine) tbSchemaName(v string) string { + // Add schema name as prefix of table name. + // Only for postgres database. + if engine.dialect.DBType() == core.POSTGRES && + engine.dialect.URI().Schema != "" && + engine.dialect.URI().Schema != DefaultPostgresSchema && + strings.Index(v, ".") == -1 { + return engine.dialect.URI().Schema + "." + v + } + return v +} + func (engine *Engine) tbName(v reflect.Value) string { if tb, ok := v.Interface().(TableName); ok { - return tb.TableName() + return engine.tbSchemaName(tb.TableName()) + } if v.Type().Kind() == reflect.Ptr { if tb, ok := reflect.Indirect(v).Interface().(TableName); ok { - return tb.TableName() + return engine.tbSchemaName(tb.TableName()) } } else if v.CanAddr() { if tb, ok := v.Addr().Interface().(TableName); ok { - return tb.TableName() + return engine.tbSchemaName(tb.TableName()) } } - return engine.TableMapper.Obj2Table(reflect.Indirect(v).Type().Name()) + return engine.tbSchemaName(engine.TableMapper.Obj2Table(reflect.Indirect(v).Type().Name())) } // Cascade use cascade or not