Да, вы можете упорядочить данные по первичному ключу, а затем записать данные в файл json или xml.
Затем вы можете запустить diff для двух файлов.
Вы также можете запустить этот блок по первичному ключу, чтобы вам не приходилось работать с огромным файлом.
Записать любой дифференциал, который не отображается как равный. Если не имеет значения, в чем разница, вы также можете просто запустить MD5 / SHA1 на двух чанках файла, и, если хэш-патчи, нет разницы, если это не так, есть.
Исходя из опыта работы с nhibernate, вам нужно следить за тем, чтобы:
- битовые поля
- text, ntext, varchar (MAX), nvarchar (MAX)) поля(кстати, они сопоставляются с varchar без длины - кодировка UTF8)
- varbinary, varbinary (MAX), изображение (bytea [] и LOB)
- xml
- что последовательный генератор идентификатора всех первичных ключей сбрасывается после того, как вы вставили все данные в pgsql.
Еще одна вещь, на которую следует обратить внимание, это какой часовой пояс использует CURRENT_TIMESTAMP.
Примечание:Я бы на самом деле запустил System.Data.DataRowComparer напрямую, без записи данных в файл:
static void Main(string[] args)
{
DataTable dt1 = dt1();
DataTable dt2= dt2();
IEnumerable<DataRow> idr1 = dt1.Select();
IEnumerable<DataRow> idr2 = dt2.Select();
// MyDataRowComparer MyComparer = new MyDataRowComparer();
// IEnumerable<DataRow> Results = idr1.Except(idr2, MyComparer);
IEnumerable<DataRow> results = idr1.Except(idr2);
}
Затем вы записываете все несоответствующие DataRows в файл журнала, для каждой таблицы одинкаталог (если есть различия).
Не знаю, что Python использует вместо System.Data.DataRowComparer. Поскольку это будет одноразовой задачей, вы также можете не делать этого в Python и использовать вместо нее C # (см. Пример кода выше).
Кроме того, если у вас большие таблицы, вы можете использовать DataReader с последовательным доступом для сравнения. Но если его обрезает другой способ, это значительно сокращает требуемую работу.