mysql遷移到pqsql筆記

在將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訪問,需要修改監控模式。具體步驟如下:

  1. 修改 data\postgresql.conf 文件,將 listen_addresses 設置爲 '*'
  2. 增加允許密碼訪問的地址,以允許特定賬號使用密碼登錄。需要修改 data\pg_hba.conf 文件。在該文件中添加以下內容:
    host all all 192.168.1.0/24 md5
    其中,192.168.1.0/24 是允許訪問的IP地址範圍,md5 表示使用密碼進行驗證。

以下是使用 pqsql 時遇到的一些問題:

  1. 數據庫名需要小寫(雖然大寫也能用),否則 HeidiSQL 工具無法使用。

  2. pqsql 自帶 pgAdmin 4 工具,可以用來管理數據庫

  3. ServiceStack 的 ORM,會自動把字段名和表名在執行時轉爲小寫,所以在註冊數據庫連接時,對名字的處理策略,緩存默認的。
    ···
    var instance = PostgreSqlDialect.Instance;
    instance.NamingStrategy = new OrmLiteNamingStrategyBase();

    factory.RegisterConnection(databaseName, connStr, instance);
    ···

  4. 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是自增的,可以使用這個腳本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章