Archive

01月 2026

Showing 2 out of total 5

dji drone enterprice wholesale
Author : Anonymous Publish Time : 07 Jan 2026 13:26:14

dji drone enterprice wholesale

  • dji drone enterprice wholesale
yii3 mysql 8 转 postgresql 18
Author : Anonymous Publish Time : 06 Jan 2026 20:30:49

yii3 mysql 8 转 postgresql 18

1.安装官方源

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm 

# 禁用系统默认PostgreSQL模块(避免冲突)

sudo dnf -qy module disable postgresql

2.安装postgresql18

sudo dnf install -y postgresql18-server postgresql18

 # 初始化数据库
sudo /usr/pgsql-18/bin/postgresql-18-setup initdb

# 启动并设置开机自启

sudo systemctl enable --now postgresql-18

修改默认数据存储位置

# 编辑PG 18的主配置文件 sudo vi /var/lib/pgsql/18/data/postgresql.conf

# 找到 data_directory 行,修改为新路径 data_directory = '/data/postgres/18' # 注意:路径要用单引号,且末尾无斜杠

# 复制默认服务文件到自定义目录(避免系统更新覆盖)

sudo cp /usr/lib/systemd/system/postgresql-18.service /etc/systemd/system/

# 编辑自定义服务文件

sudo vi /etc/systemd/system/postgresql-18.service

# 找到 [Service] 段,添加/修改 Environment 行(指定新数据目录)

[Service] Environment=PGDATA=/data/postgres/18

# 刷新systemd配置 sudo systemctl daemon-reload

# 启动PG 18服务 sudo systemctl start postgresql-18

# 确认服务正常运行 sudo systemctl status postgresql-18

2.使用pgloader把mysql数据库转成postgres

dnf install -y pgloader

建立postgres数据库,用户,授权

进入postgres命令行

sudo -u postgres psql 

新建数据库,用户,并授权,这里把数据库全部权限给了

CREATE DATABASE  db_psql;
CREATE USER db_user WITH PASSWORD 'your password';
GRANT ALL PRIVILEGES ON DATABASE db_psql TO db_user;

编写转换脚本

vi migration.load

LOAD DATABASE
     FROM mysql://mysql_user:password@172.232.188.233/mysqldb
     INTO postgresql://postgres_user:password@127.0.0.1/db_psql


WITH include drop, create tables,
     reset sequences,
     quote identifiers,
     workers = 8, concurrency = 1,
     multiple readers per thread, rows per range = 50000

SET PostgreSQL PARAMETERS
     maintenance_work_mem to '128MB',
     work_mem to '12MB'

SET MySQL PARAMETERS
     net_read_timeout  = '120',
     net_write_timeout = '120'

CAST
     type date drop default drop not null using zero-dates-to-null,
     type year to integer;

具体参数参考 https://pgloader.readthedocs.io/en/latest/ref/mysql.html

AI可能会给你一些过时的参数,自己参考一下

执行转换:

 pgloader migration.load

顺利的话可能就可以转换过去,每个库的情况可能不太一样

对于yii3建议保留数据库大小写 ,加上 quote identifiers这个参数,因为yii3 cycle数据库同步会把字段大小写是区分的(不知道怎么设置成都转换小写)

3.升级yii程序

     composer require yiisoft/db-pgsql 

     可以移除db-mysql

    composer remove yiisoft/db-mysql 

      config/common/di/db-mysql.php 可以重命名或者删除

     添加 db-pgsql.php

 

<?php
declare(strict_types=1);
use Yiisoft\Db\Connection\ConnectionInterface;
use Yiisoft\Db\Pgsql\Connection;
use Yiisoft\Db\Pgsql\Driver;

/** @var array $params */

return [
    ConnectionInterface::class => [
        'class' => Connection::class,
        '__construct()' => [
            'driver' => new Driver(
                $params['yiisoft/db-pgsql']['dsn'],
                $params['yiisoft/db-pgsql']['username'],
                $params['yiisoft/db-pgsql']['password'],
            ),
        ],
    ],
];

    然后修改

 config/common/params.php 

   关于mysql的配置

//    'yiisoft/db-mysql' => [
//        'dsn' => (new Dsn('mysql', '127.0.0.1', 'youdb', '3306', ['charset' => 'utf8mb4']))->__toString(),
//        'username' => 'dbuser',
//        'password' => 'dbpassword',
//    ],
     'yiisoft/db-pgsql' => [
        'dsn' => new Dsn('pgsql', '127.0.0.1', 'your_psql', '5432'),
        'username' => 'pg_user',
        'password' => 'pg_password',
    ],

如果你使用了cycle

//            'databases' => [
//                'default' => ['connection' => 'mysql', 'prefix' => 'mt_'],
//            ],
//            'connections' => [
//                'mysql' => new \Cycle\Database\Config\MySQLDriverConfig(
//                        connection: new \Cycle\Database\Config\MySQL\TcpConnectionConfig(
//                                database: 'mysqldb',
//                                host: '127.0.0.1',
//                                port: 3306,
//                                user: 'mysql_user',
//                                password: 'mysql_password',
//                                charset: 'utf8mb4',
//                        ),
//                        queryCache: true,
//                        timezone: 'Asia/Shanghai'
//                ),
//            ],
               'databases' => [
                'default' => ['connection' => 'postgres', 'prefix' => 'mt_'],
            ],
            'connections' => [
                'postgres' => new \Cycle\Database\Config\PostgresDriverConfig(
                        connection: new \Cycle\Database\Config\Postgres\TcpConnectionConfig(
                                database: 'your_psql_db',
                                host: '127.0.0.1',
                                port: 5432,
                                user: 'pgsl_user',
                                password: 'pgsl_password',
                        ),
                        schema: 'pgsl_shema(这个可以是原来mysql数据库名)',
                        queryCache: true,
                        timezone: 'Asia/Shanghai'
                ),
            ],

更改配置文件,然后吧数据库同步打开执行一次,会检查数据错误,如果有数据不一致等情况会执行很慢,根据错误修改,(不要忘记生产环境要把这个关掉)

        FromConveyorSchemaProvider::class => [
                'generators' => [
                    Cycle\Schema\Generator\SyncTables::class, // sync table changes to database
                ],
            ],