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访问,需要修改监控模式。具体步骤如下:
- 修改
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是自增的,可以使用这个脚本