Какую кодировку использовать для представления индексов DBF (CDX)

Я пытаюсь извлечь данные из нескольких таблиц FoxPro, используя решение с открытым исходным кодом. Есть несколько .dbf таблицы и связанные .cdx индексов. Проблема в том, что два столбца в таблицах состоят из символов, которые не являются стандартными символами. Эти столбцы являются внешними ключами других таблиц. Чтобы извлечь данные, мне нужен способ / программа для распознавания этих символов, чтобы можно было выполнять объединения.

Это похоже на проблему поиска правильной кодировки для ключей. Тем не менее, я включил подробности о моих различных попытках на случай, если я слишком далеко в кроличьей норе, чтобы найти лучшее решение.

1. Питон dbf модуль

Мне больше всего повезло с питоном dbf модуль. Я могу сделать следующее и увидеть ключи:

import dbf
tbl = dbf.Table('table.dbf')
tbl.open()
print(tbl[1])

  0 - f_key1 : '\x00\x00\x01'
  1 - f_key2: '\x00\x01'
  2 - some_data1: ' 64'
  3 - some_data2: ' 13'  

Я попытался экспортировать эти данные, но получил ошибку:

dbf.export(tbl, filename='table.csv', format='csv', header=True)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 2: character maps to <undefined> 

Я не знаю, какую кодировку использовать.

2. pgdbf

Другой подход, который я использовал, был установить pgdbf (версия 0.6.2) в Debian VirtualBox. Это позволило мне преобразовать таблицы в Postgres. Я использовал настройки по умолчанию,

pgdbf -c -e -n -Q -t table.dbf > table.pgsql

Однако кажется, что столбцы внешнего ключа не были преобразованы. Столбцы выглядят пустыми, и выполнение внешнего объединения создает гораздо больший результат, чем следовало бы. У меня есть результаты объединения, выполненного с использованием FoxPro на двух из таблиц. Одна таблица имеет 650404 строки, а другая - 149253. В результате полного внешнего соединения двух внешних ключей получена таблица 650404.

Код FoxPro был

SELECT Table1.id1, Table2.id2;
FROM ;
3Q04!TABLE1 ;
FULL JOIN 3Q04!TABLE2 ;
ON  Table1.f_key1 = Table2.f_key1;
AND  Table1.f_key2 = Table2.f_key2

Когда я пытаюсь выполнить то же соединение в преобразованной таблице Postgres, на VirtualBox заканчивается свободное место (генерируется намного больше 650404 строк). Похоже, это подразумевает, что внешние ключи не были преобразованы, и объединение совпадает во всем.

Запрос Postgres был

create view t1_t2 as
  select
      d.id as id1
    , e.id as id2
  from table1 d
  full outer join table2 e
  on d.f_key1 = e.f_key1
  and d.f_key2 = e.f_key2
;

3. pgloader

Я начал играть с pgloader, но это тоже, похоже, не в состоянии напрямую справиться .cdx Файлы \ индексы.

0 ответов

Другие вопросы по тегам