在將MySQL遷移到PostgreSQL的過程中,遇到了一些問題,下面是一些簡單的解決方案。
- 使用命令,初始化數據庫,並設置postgres的密碼
bin\initdb -E UTF-8 -A md5 -U postgres -W -D data
-- 如果只使用bin\pg_ctl -D data init
則不會設置postgres的密碼- 命令啓動pqsql:
bin\pg_ctl -D data -l postgresql.log start
-- 啓動後當前控制檯不會退出,需要手動關閉(使用關閉腳本) - 關閉數據庫:
bin\pg_ctl -D data stop
爲了允許本機以外的IP訪問,需要修改監控模式。具體步驟如下:
- 修改
data\postgresql.conf
文件,將listen_addresses
設置爲'*'
。 - 增加允許密碼訪問的地址,以允許特定賬號使用密碼登錄。需要修改
data\pg_hba.conf
文件。在該文件中添加以下內容:
host all all 192.168.1.0/24 md5
其中,192.168.1.0/24
是允許訪問的IP地址範圍,md5
表示使用密碼進行驗證。
以下是使用 pqsql 時遇到的一些問題:
-
數據庫名需要小寫(雖然大寫也能用),否則 HeidiSQL 工具無法使用。
-
pqsql 自帶 pgAdmin 4 工具,可以用來管理數據庫
-
ServiceStack 的 ORM,會自動把字段名和表名在執行時轉爲小寫,所以在註冊數據庫連接時,對名字的處理策略,緩存默認的。
···
var instance = PostgreSqlDialect.Instance;
instance.NamingStrategy = new OrmLiteNamingStrategyBase();factory.RegisterConnection(databaseName, connStr, instance);
··· -
ExecuteReader.Parse
會因爲某些字段有特殊的序列化規則,而無法進行序列化
解決辦法,使用mysql分頁腳本
select * from {typeof(T).Name} limit batchSize offset skip -- 不好用,超過100w條記錄後,會導致查詢超時
SELECT * FROM {typeof(T).Name} where id > {skip} and id <={skip + batchSize} -- 剛好默認id是自增的,可以使用這個腳本