首先明確用的postgresql版本是
PostgreSQL 9.5.25, compiled by Visual C++ build 1800, 64-bit
springboot是
2.3.5.RELEASE。
現有的文檔提供的連接數據庫配置方式是
url: jdbc:postgresql://IP:端口/數據庫名?currentSchema=模式名&stringtype=unspecified
通常postgresql默認指向的Schema是 public。
這次因為用到ArcGis,其默認要讀取的Schema是postgres,所以就創建了一個Schema叫postgres的。
項目連接還是指定的public的Schema,后來發現項目讀取的表會讀到postgres的Schema里,查詢配置指定讀取Schema,很多文章都是說用的url里的
currentSchema=模式名方式配置,可是不生效。
后來看文章說是讀取數據庫有個Schema的讀取順序。 查詢語句為:
SHOW search_path;
查詢結果為:
postgres, "$user", public, topology, sde
第一位成了postgres,以前沒有這個Schema,會去讀取 $user 的Schema,這個指的是與當前連接數據庫的用戶名一致的Schema。因為不存在,則讀取到了public。
只是比較奇怪的是明明springboot的配置中指定了Schema,但是不生效。
這個問題同樣出在mybatis-plus根據數據庫表結構生成對應文件的項目中,在這個項目中也需要連接數據庫,經測試,同樣的url配置Schema不生效,需要額外的指定Schema,才會去讀取這個指定的Schema。
// 數據源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.POSTGRE_SQL); dsc.setTypeConvert(new PostgreSqlTypeConvert()); dsc.setDriverName("org.postgresql.Driver"); dsc.setUsername("postgres"); dsc.setPassword("postgres"); dsc.setUrl("jdbc:postgresql://IP:端口/test1?currentSchema=postgres&stringtype=unspecified");//這里指定的sehema沒有作用,需要單獨指定 dsc.setSchemaName("public"); mpg.setDataSource(dsc);
現在Springboot集成postgresql的yml文件沒有對應的,url里的指定不生效。暫時還沒找到好的解決方法。后續哪位有好方法,麻煩分享下。