Преобразовать Access в PostgreSQL?

Клиент перерос свою базу данных Access, и теперь мне нужно преобразовать ее в PostgreSQL. У меня нет большого опыта работы с Access, поэтому на первый взгляд кажется, что лучшее решение — просто экспортировать данные с помощью текстовых файлов или чего-то еще.

Есть ли у кого-нибудь хорошие предложения по простому способу получить DDL и данные из Access во что-то реальное?


person Jeffrey Melloy    schedule 12.03.2009    source источник
comment
Повторяющиеся вопросы: stackoverflow.com/questions/49116690/, stackoverflow.com/questions/1440648/, stackoverflow.com/questions/20780250/   -  person mic    schedule 06.08.2019


Ответы (5)


  • Install Postgres ODBC driver on Windows computer.
  • Create a data source with "PostgreSQL Unicode" driver to your new database
  • For every table:
    • Use "File -> Export" choose type "ODBC Databases"
    • Confirm table name
    • Choose "Computer data source"
    • Select your data source

Хорошо работает, если у вас не слишком много таблиц. Мне нужно было автоматизировать это, поэтому я создал сценарий VBS, который просто выдавал нажатия клавиш в нужное время, например:

set shell=CreateObject("Wscript.Shell")
shell.Run("db1.mdb")
WScript.Sleep(5000);

shell.sendkeys("tablename1");
WScript.Sleep(1000);
shell.sendkeys("%fx"); ' Menu File, Export
WScript.Sleep(1000);
shell.sendkeys("%todbc"); ' Type: ODBC Databases
shell.sendkeys("~"); ' Enter

и Т. Д.

person Tometzky    schedule 13.03.2009

На основе http://www.postgresonline.com/journal/archives/24-Using-MS-Access-with-PostgreSQL.html, но обновлен для Access 2019 с более подробной информацией:

  1. Установите драйверы PostgreSQL ODBC.

    1. You may have this already installed from installing PostgreSQL. If not, you can install them from https://www.postgresql.org/ftp/odbc/versions/msi/.
    2. Вам следует установить 32-разрядный драйвер, если ваш Access 32-разрядный, и 64-разрядный драйвер, если Access 64-разрядный. Вы можете увидеть, является ли Access 32-разрядным или 64-разрядным, выбрав «Файл»> «Учетная запись»> «О доступе».
    3. Удалите старые версии драйвера PostgreSQL перед установкой новой.
    4. Дополнительные советы см. в разделе Настройка ODBC PostgreSQL в Windows.
  2. Внешние данные > Новый источник данных > Из других источников > База данных ODBC. Сочетание клавиш для этого — Alt > X > N1 > T > C.

  3. Выберите Связать с источником данных, создав связанную таблицу, и нажмите ОК.

  4. Рядом с именем DSN нажмите Создать....

  5. Выберите PostgreSQL Unicode, если ваши базы данных имеют кодировку UTF-8 или нелатинскую кодировку. Выберите PostgreSQL ANSI, если кодировка вашей базы данных — SQL_ASCII, EUC_JP, BIG5, Shift-JIS или набор символов LATIN. Базы данных, созданные из Access 2000 или более поздней версии, имеют кодировку UTF-8. Выберите 64-разрядную версию, если Access является 64-разрядным. Нажмите Далее>.

Диалоговое окно

  1. Как говорится в диалоговом окне, «Введите имя файлового источника данных, в котором вы хотите сохранить подключение. Или найдите место для сохранения, нажав «Обзор». Нажмите Далее>. Нажмите Готово.

  2. Заполните поля База данных, Сервер, Порт, Имя пользователя и Пароль.

  3. Нажмите Подключение и снимите флажок Bools as char.

Диалоговые окна PostgreSQL и дополнительных параметров

  1. Нажмите Страница 2 и установите флажок Истина равна -1, а также снимите флажок Обновляемые курсоры. Нажмите ОК. Нажмите ОК.

  2. Если вы получили сообщение об ошибке «Не удалось установить соединение с использованием введенных параметров источника данных файла», откройте Источники данных ODBC (64-разрядная версия) в меню «Пуск» (или «Администратор ODBC» из панели управления). для Windows 7 или более ранней версии) нажмите Добавить..., выберите PostgreSQL Unicode(x64), нажмите Готово, введите данные для своей базы данных и нажмите Проверить.

Администратор источника данных ODBC

  1. Выберите только что созданный файл .dsn и нажмите OK.
  1. Теперь выберите нужные таблицы и нажмите Сохранить пароль. Если у вас отсутствуют первичные ключи в таблицах, Access предложит указать, какие поля или набор полей вы хотели бы использовать в качестве первичного ключа. Это не вносит каких-либо структурных изменений в фактическую таблицу, но в связанной структуре Access будет притворяться, что это первичный ключ, и использовать его соответственно для обновлений таблицы и тому подобного. Это особенно полезно для представлений, в которых концепция первичных ключей не существует, и вы хотите, чтобы ваши обновляемые представления можно было обновлять из Access. Если вы нажмете «ОК» или «Отмена» на вопрос, не выбрав набор полей, эта таблица будет помечена как «только для чтения», что является желательным поведением для многих представлений отчетов.

Чтобы экспортировать данные из таблицы Access в PostgreSQL:

  1. Выберите таблицу.

  2. Переименуйте таблицу так, как вы хотите.

  1. Убедитесь, что схема по умолчанию пользователя, которого вы используете в Postgres, является схемой, в которую вы хотите экспортировать данные.
  1. External Data > More (in the Export section) > ODBC Database and select the DSN you created.
    1. One gotcha here is that PostgreSQL will maintain the casing of the fields in the table and the table name, so it's best to rename all your fields to lowercase first so you don't have to be quoting them every time you use them.
person mic    schedule 09.08.2019

Вы должны быть в состоянии написать что-то, что может видеть их обоих с помощью ODBC или чего-то еще, но в противном случае вы могли бы запишите его в текстовый файл или используйте a коммерческий инструмент.

person MarkusQ    schedule 12.03.2009

Это старый скрипт, который я давно не обновлял, но я использовал его для аналогичной цели: http://code.activestate.com/recipes/52267/

Другой коммерческий вариант: http://www.datanamic.com/dbzipper/index.html

person kermatt    schedule 12.03.2009

Access — отличная программа, но ей мешает неспособность легко экспортировать или подключаться к внешним источникам ODBC.

Использование драйвера ODBC было бы идеальным, но установка выглядит довольно сложной.

Поэтому я просто экспортировал таблицы одну за другой в CSV-файлы, а затем импортировал каждую из них в базу данных Postgres через DBeaver, действительно хороший бесплатный инструмент администрирования базы данных — проверьте его здесь — https://dbeaver.io.

person Brian Burns    schedule 15.12.2019
comment
Но он не будет экспортировать свои отношения ... - person swdev; 11.02.2021