Приведу алгоритм действий, которые при хорошей погоде могут привести к успешному результату.
1. Создаем PgSQL базу данных и юзером под неё
Код: Выделить всё
# CREATE USER forum;
# CREATE DATABASE forum OWNER forum ENCODING 'UTF-8';
3. Дампаем структуру новой БД
Код: Выделить всё
# pg_dump --schema-only -U forum -d forum > schema.sql
3.2. Убиваем новую БД и создаем заново :)
Код: Выделить всё
# DROP DATABASE forum;
# CREATE DATABASE forum OWNER forum ENCODING 'UTF-8';
Код: Выделить всё
# mysqldump -u forum --compatible=postgresql --skip-extended-insert --no-create-info --skip-add-locks --skip-lock-tables forum > data.sql
Код: Выделить всё
# psql -U forum -d forum < schema.sql
Код: Выделить всё
# psql -U forum -d forum < dump.sql
Код: Выделить всё
<?php
pg_connect('host=localhost user=forum');
$sql = "SELECT pg_class.oid, pg_class.relname
FROM pg_class
JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public'
WHERE
pg_class.relkind = 'r'
ORDER BY pg_class.relname ASC";
$tables_h = pg_query($sql);
while($table = pg_fetch_assoc($tables_h))
{
$sql = "SELECT pg_attribute.attname, pg_attrdef.adsrc FROM pg_attrdef
JOIN pg_attribute ON pg_attribute.attrelid = " . $table['oid'] . " AND pg_attribute.attnum = pg_attrdef.adnum AND pg_attrdef.adrelid = pg_attribute.attrelid";
$cols_h = pg_query($sql);
while($column = pg_fetch_assoc($cols_h))
{
if(preg_match('/nextval\(\'([^\']+)\'::regclass\)/i', $column['adsrc'], $matches))
{
$seq_name = $matches[1];
$sql = "SELECT MAX(" . $column['attname'] . ") AS maxvalue FROM " . $table['relname'];
$seq_h = pg_query($sql);
$seq = pg_fetch_assoc($seq_h);
if($seq['maxvalue'] > 0)
{
$sql = "SELECT SETVAL('$seq_name', " . $seq['maxvalue'] . ")";
pg_query($sql);
echo($sql . "\n");
}
else
{
echo("Skipped " . $column['adsrc'] . "\n");
}
}
}
}
?>
9. Смотрим код сторонних модов - их разработчики зачастую не заботятся о совместимости с другими СУБД, помимо MySQL. Меняем mysql-специфичные конструкции типа LIMIT 0, 10 на корректные.
A. Профит.