pgloader не импортирует данные из MySQL в Postgres
Я попробовал следующую команду, и она не возвращает ошибок, но данные не импортируются в мою базу данных postgres.
База данных уже создана в Postgres.
pgloader mysql://user:password@localhost/mydb postgresql://user:password@localhost/mydb
Это результат:
table name read imported errors total time
------------------------------------------------- --------- --------- --------- --------------
fetch meta data 38 38 0 1.032s
Create Schemas 0 0 0 0.253s
Create SQL Types 0 0 0 0.008s
Create tables 20 20 0 0.417s
Set Table OIDs 10 10 0 0.020s
------------------------------------------------- --------- --------- --------- --------------
mydb.active_admin_comments 0 0 0 0.007s
mydb.ar_internal_metadata 1 1 0 0.139s
mydb.departments 2 2 0 0.090s
mydb.roles 2 2 0 0.174s
mydb.sentiments 3 3 0 0.223s
mydb.twitter_users 6 6 0 0.276s
mydb.designations 3 3 0 0.087s
mydb.schema_migrations 17 17 0 0.085s
mydb.tweets 47 47 0 0.238s
mydb.users 2 2 0 0.184s
------------------------------------------------- --------- --------- --------- --------------
COPY Threads Completion 4 4 0 0.333s
Create Indexes 22 22 0 2.770s
Index Build Completion 22 22 0 0.626s
Reset Sequences 8 8 0 0.208s
Primary Keys 10 10 0 0.069s
Create Foreign Keys 6 6 0 0.053s
Create Triggers 0 0 0 0.000s
Install Comments 0 0 0 0.000s
------------------------------------------------- --------- --------- --------- --------------
Total import time 83 83 0 4.051s
Когда я вхожу в psql для поиска данных, его там нет. Например, для пользователей таблицы 2 записи должны были быть импортированы, как упомянуто выше pgloader, но это результат:
user1=> \c mydb postgres
Password for user postgres:
psql (10.0, server 9.6.5)
You are now connected to database "mydb" as user "postgres".
mydb=# SELECT count(*) FROM users;
count
-------
0
(1 row)
mydb=# \dn
List of schemas
Name | Owner
-----------------------------+----------
public | postgres
mydb | postgres
(2 rows)
Что не так?
1 ответ
Я предполагаю, что из-за различий в терминологии (схема mysql - это то, что postgres использует в качестве базы данных), ваши таблицы загружены в схему mydb, а не в public. список с префиксом в имени таблицы дал эту идею. поэтому, чтобы найти загруженные данные - укажите имя схемы перед именем таблицы, например
select count(*) from mydb.schema_migrations
должен вернуть 17 строк - импортировано с pgloader
Вы также можете использовать файл загрузки, чтобы сделать таблицы общедоступными после импорта.
Добавьте это в файл (например, load_file.load):
LOAD DATABASE
FROM mysql://root:mysql@localhost/from_db_name
INTO postgresql://localhost/to_db_name
ALTER schema 'to_db_name' rename to 'public';
И запускаем:
$ pgloader load_file.load