我将我的应用程序从 mysql 移植到 postgresql。在这样做的过程中,在大多数情况下更改为使用下划线作为单词分隔符的驼峰式列名。有一对夫妇的骆驼案刚刚被移除。
我现在需要插入这两个数据库。数据、列数等都是相同的,只是列名略有不同。我可以使用 PDO 来切换数据库驱动程序并插入,但我喜欢这样做而不需要为插入编写两个单独的 sql 语句。是否有一种通用方法将列名映射到数组键或填充某个类并将其传递给 PDO。
我将我的应用程序从 mysql 移植到 postgresql。在这样做的过程中,在大多数情况下更改为使用下划线作为单词分隔符的驼峰式列名。有一对夫妇的骆驼案刚刚被移除。
我现在需要插入这两个数据库。数据、列数等都是相同的,只是列名略有不同。我可以使用 PDO 来切换数据库驱动程序并插入,但我喜欢这样做而不需要为插入编写两个单独的 sql 语句。是否有一种通用方法将列名映射到数组键或填充某个类并将其传递给 PDO。
$column_names[] = array('someName'=>'some_name');
$column_names[] = array('someOtherName'=>'some_other_name');
$column_names[] = array('someOtherNameAgain'=>'some_other_name_again');
foreach($column_names as $mysql=>$post_ogre)
{
//decide which one you want to use here
}
类似的东西应该可以工作
INFORMATION_SCHEMA.COLUMNS
您可以通过查看两个数据库都支持的表来自动创建列名关联表。
首先,对 MySQL 运行它:
SELECT
column_name,
ordinal_position,
data_type
FROM information_schema.columns
WHERE table_schema = 'mysql_dbname'
AND table_name = 'mytable'
然后,对 PostgreSQL 运行几乎相同的查询:
SELECT
column_name,
ordinal_position,
data_type
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'mytable'
现在,从两边来看column_name
,ordinal_position
您可以轻松地在新旧列名之间创建映射表(假设 Postgres 名称对您来说是主要的)。您可以单独为每个表执行此操作,也可以一次执行所有操作(只需删除 table_name 约束)。
知道映射后,当您需要在任何针对 MySQL 的 SQL 语句中使用列名时,您必须通过此映射替换它。