Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / экспорт/импорт MSSQL->PostgreSQL / 17 сообщений из 17, страница 1 из 1
28.01.2013, 01:09
    #38126604
juwdoks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
Нужно в PostgreSQL (9.2) залить табличку из SQLServer (MSSQL 2008 R2). Все на машине Win32 (Windows XP SP3).
В таблице 90 млн. строк, Data ~8Гб.
Железо: Mobile Intel Celeron 540, 1866 MHz/ 1Гб DDR2-667

Пробовал
1. DBConvert (PostgreSQL to MS SQL database conversion) - маленькие таблички без проблем, а нужная вылетает по таймауту. Сдампить тоже не получилось.

2. Linked Server MS SQL -> PostgreSQL под PSQLODBC.DLL
Вешается на 100k строк.

3. odbc_fdw для PostgreSQL -> MS SQL настроить не получилось (актуальная версия только под 9.1, исходники скомпилить под 9.2 нельзя );
"We changed the planner API for foreign data wrappers in 9.2, so you
won't be able to compile 9.1 FDWs until their code is updated.
regards, tom lane"

4. php скриптом, но даже дамп в csv для последующего импорта не получается сделать - не тянет комп (не хватает оперативки).

Подскажите плиз решение, рабочее для минимум 6 млн. записей за раз.
Крайне желательно чтобы работало напрямую, по примеру dblink.

Структура таблицы:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE TABLE t1 (
  f1 INTEGER NOT NULL, 
  f2 INTEGER NOT NULL, 
  f3 SMALLINT NOT NULL, 
  f4 SMALLINT NOT NULL, 
  f5 SMALLINT NOT NULL, 
  f6 SMALLINT NOT NULL, 
  f7 SMALLINT NOT NULL, 
  f8 INTEGER NOT NULL, 
  f9 SMALLINT NOT NULL, 
  f10 SMALLINT NOT NULL, 
  f11 SMALLINT NOT NULL, 
  f12 SMALLINT NOT NULL, 
  f13 SMALLINT NOT NULL, 
  f14 SMALLINT NOT NULL, 
  f15 SMALLINT NOT NULL, 
  f16 SMALLINT NOT NULL, 
  f17 INTEGER NOT NULL, 
  f18 INTEGER NOT NULL, 
  f19 DATE NOT NULL, 
  f20 SMALLINT NOT NULL, 
  CONSTRAINT t1_pkey PRIMARY KEY(f1)
) 
WITH (oids = false);
...
Рейтинг: 0 / 0
28.01.2013, 04:51
    #38126644
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
juwdoks...
4. php скриптом, но даже дамп в csv для последующего импорта не получается сделать - не тянет комп (не хватает оперативки).

Подскажите плиз решение, рабочее для минимум 6 млн. записей за раз.
... ну так разбейте на части.
select * from t1 where f1 > ? order by f1 limit 10000 (или как там оно в mssql)
...
Рейтинг: 0 / 0
28.01.2013, 09:18
    #38126700
juwdoks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
V&N,

Да, пришлось разбить, но COPY FROM нескольких файлов оказалось медленнее, чем одного большого. С UNLOGGED и без индексов все более-менее на запись, но еще надеюсь как-то и с индексами сделать нормальную скорость.
...
Рейтинг: 0 / 0
09.09.2013, 12:58
    #38390892
DNShark
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
Решил новую тему не создавать. А какие есть достойные утилиты, для перевода базы с MS-SQL на PostgreSQL. Со всеми таблицами, View и хранимыми процедурами... Понятно, что все равно придется ручками много чего доделывать, но всё же)? Кто уже переводил, отзовитесь).
...
Рейтинг: 0 / 0
09.09.2013, 13:22
    #38390914
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
...
Рейтинг: 0 / 0
09.09.2013, 13:29
    #38390924
DNShark
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
Misha Tyurin,

ага) спасибо большое
...
Рейтинг: 0 / 0
09.09.2013, 14:37
    #38391027
ORA-12705
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
DNSharkРешил новую тему не создавать. А какие есть достойные утилиты, для перевода базы с MS-SQL на PostgreSQL. Со всеми таблицами, View и хранимыми процедурами... Понятно, что все равно придется ручками много чего доделывать, но всё же)? Кто уже переводил, отзовитесь).

Переводили. Тестировали разнообразные инструменты. Наиболее рабочим маршрутом оказалась миграция в PostgreSQL через оракл (через SQL Developer). А из оракла уже используя EnterpriseDB-MigrationToolkit или ora2pg. Только по такому маршруту удавалось передать хоть сколько-нибудь кода на постгрес. Но серебрянной пули не существует, все решения со своими косяками. Если кода у вас немного, то возможно это и получится как-то автоматизировать. Если же много кода, а система MSSQL боевая, работающая в режиме 24х7 и имеющая множество связанных с ней подсистем, то получите много головной боли используя какие-то инструменты автоматической миграции, слишком много кривого кода выходит из этих систем миграции.

В конечном итоге, остановились на варианте ручной миграции. Весь код переписывается вручную. Данные можно переносить при помощи JDBC_FDW - на относительно небольших данных работает неплохо. Когда потребовалось переносить большее количество (45 млн.) - написали утилитку на ява, которая переносила данные батчами по 10 тыс. записей.
...
Рейтинг: 0 / 0
09.09.2013, 17:23
    #38391321
DNShark
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
ORA-12705,

ага в ручную хоть знаешь, что меняешь. Я вот тоже попробовал DBConverter. Ну структуру частично перенес, правда с FOREIGN KEY возникли проблемы Cyclic referense detected и Data can not be added or updated: a foreign key constraint fails.

конечно разница в скрипте солидная, между MS-SQL и Postgres при использовании конвертеров оно из
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE Installers(
	Installer_id int IDENTITY(1,1) NOT NULL,
	InstallerName varchar(200) NOT NULL,
 CONSTRAINT PK_Installers PRIMARY KEY  
(
	Installer_id ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ,
 CONSTRAINT IX_Installers UNIQUE NON 
(
	InstallerName ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) 
) 
;



сделало

Код: sql
1.
2.
3.
4.
CREATE TABLE "Installers" (
    "Installer_id" integer NOT NULL,
    "InstallerName" character varying(200) NOT NULL
);
...
Рейтинг: 0 / 0
09.09.2013, 19:08
    #38391435
Константин Евтеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
Для переноса данных мне больше всего подошло SSIS пакеты (мастер импорта и экспорта SQL Server), а потом команда copy в postgres, только нужно разделитель какой-нибудь использовать необычный, я например брал char(15)
...
Рейтинг: 0 / 0
10.09.2013, 17:44
    #38392687
DNShark
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
А вот такой вопрос. Как бы есть в базе таблица архивов событий. Она очень большая и хранится в кучке более мелких таблиц, каждая таблица - свой месяц. Организовано - это через clustered . Вот таким скриптом

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
create table [dbo].[archive20130901](
	[event_id] [int] not null,
	[date_key] [int] not null,
	[panel_id] [varchar](15) null,
	[group_] [int] null,
	[line] [varchar](10) null,
	[zone] [int] null,
	[code] [varchar](6) null,
	[codegroup] [smallint] null,
	[timeevent] [datetime] null,
	[phone] [varchar](15) null,
	[metercount] [varchar](50) null,
	[timemetercount] [datetime] null,
	[stateevent] [smallint] null,
	[event_parent_id] [int] null,
	[result_text] [varchar](800) null,
 constraint [pk_archive20130901] primary key clustered 
(
	[event_id] asc
)with (pad_index  = off, statistics_norecompute  = off, ignore_dup_key = off, allow_row_locks  = on, allow_page_locks  = on) on [primary]
) on [primary]
go
set ansi_padding off
go
/****** object:  table [dbo].[archive20130801]    script date: 09/10/2013 16:24:54 ******/
set ansi_nulls on
go
set quoted_identifier on
go
set ansi_padding on
go
create table [dbo].[archive20130801](
	[event_id] [int] not null,
	[date_key] [int] not null,
	[panel_id] [varchar](15) null,
	[group_] [int] null,
	[line] [varchar](10) null,
	[zone] [int] null,
	[code] [varchar](6) null,
	[codegroup] [smallint] null,
	[timeevent] [datetime] null,
	[phone] [varchar](15) null,
	[metercount] [varchar](50) null,
	[timemetercount] [datetime] null,
	[stateevent] [smallint] null,
	[event_parent_id] [int] null,
	[result_text] [varchar](800) null,
 constraint [pk_archive20130801] primary key clustered 
(
	[event_id] asc
)with (pad_index  = off, statistics_norecompute  = off, ignore_dup_key = off, allow_row_locks  = on, allow_page_locks  = on) on [primary]
) on [primary]
go
set ansi_padding off
go
/****** object:  table [dbo].[archive20130701]    script date: 09/10/2013 16:24:54 ******/
set ansi_nulls on
go
set quoted_identifier on
go
set ansi_padding on
go
create table [dbo].[archive20130701](
	[event_id] [int] not null,
	[date_key] [int] not null,
	[panel_id] [varchar](15) null,
	[group_] [int] null,
	[line] [varchar](10) null,
	[zone] [int] null,
	[code] [varchar](6) null,
	[codegroup] [smallint] null,
	[timeevent] [datetime] null,
	[phone] [varchar](15) null,
	[metercount] [varchar](50) null,
	[timemetercount] [datetime] null,
	[stateevent] [smallint] null,
	[event_parent_id] [int] null,
	[result_text] [varchar](800) null,
 constraint [pk_archive20130701] primary key clustered 
(
	[event_id] asc
)with (pad_index  = off, statistics_norecompute  = off, ignore_dup_key = off, allow_row_locks  = on, allow_page_locks  = on) on [primary]
) on [primary]
go
set ansi_padding off
go
/****** object:  view [dbo].[vwarchives]    script date: 09/10/2013 16:24:55 ******/
set ansi_nulls on
go
set quoted_identifier on
go
create view [dbo].[vwarchives] as 
select * from archive20110401
union all
select * from archive20110501
union all
select * from archive20110601
union all
select * from archive20110701
union all
select * from archive20110801
union all
select * from archive20110901
union all
select * from archive20111001
union all
select * from archive20111101
union all
select * from archive20111201
union all
select * from archive20120101
union all
select * from archive20120201
union all
select * from archive20120301
union all
select * from archive20120401
union all
select * from archive20120501
union all
select * from archive20120601
union all
select * from archive20120701
union all
select * from archive20120801
union all
select * from archive20120901
union all
select * from archive20121001
union all
select * from archive20121101
union all
select * from archive20121201
union all
select * from archive20130101
union all
select * from archive20130201
union all
select * from archive20130301
union all
select * from archive20130401
union all
select * from archive20130501
union all
select * from archive20130601
union all
select * from archive20130701
union all
select * from archive20130801
union all
select * from archive20130901
go
/****** object:  check [ck_archive20130701]    script date: 09/10/2013 16:24:54 ******/
alter table [dbo].[archive20130701]  with check add  constraint [ck_archive20130701] check  (([date_key]>=(20130701) and [date_key]<=(20130731)))
go
alter table [dbo].[archive20130701] check constraint [ck_archive20130701]
go
/****** object:  check [ck_archive20130801]    script date: 09/10/2013 16:24:54 ******/
alter table [dbo].[archive20130801]  with check add  constraint [ck_archive20130801] check  (([date_key]>=(20130801) and [date_key]<=(20130831)))
go
alter table [dbo].[archive20130801] check constraint [ck_archive20130801]
go
/****** object:  check [ck_archive20130901]    script date: 09/10/2013 16:24:54 ******/
alter table [dbo].[archive20130901]  with check add  constraint [ck_archive20130901] check  (([date_key]>=(20130901) and [date_key]<=(20130930)))
go
alter table [dbo].[archive20130901] check constraint [ck_archive20130901]
go
/****** object:  foreignkey [fk_archive20130701]    script date: 09/10/2013 16:24:54 ******/
alter table [dbo].[archive20130701]  with check add  constraint [fk_archive20130701] foreign key([event_parent_id])
references [dbo].[archive20130701] ([event_id])
go
alter table [dbo].[archive20130701] check constraint [fk_archive20130701]
go
/****** object:  foreignkey [fk_archive20130801]    script date: 09/10/2013 16:24:54 ******/
alter table [dbo].[archive20130801]  with check add  constraint [fk_archive20130801] foreign key([event_parent_id])
references [dbo].[archive20130801] ([event_id])
go
alter table [dbo].[archive20130801] check constraint [fk_archive20130801]
go
/****** object:  foreignkey [fk_archive20130901]    script date: 09/10/2013 16:24:54 ******/
alter table [dbo].[archive20130901]  with check add  constraint [fk_archive20130901] foreign key([event_parent_id])
references [dbo].[archive20130901] ([event_id])
go
alter table [dbo].[archive20130901] check constraint [fk_archive20130901]
go



Вот и думаю, а есть аналог такой constraint в Posgres ?
...
Рейтинг: 0 / 0
10.09.2013, 18:26
    #38392746
DNShark
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
DNShark,

Как выполнять запросы, использующие несколько баз данных?

Не существует способа создать запрос к базам данных отличным от текущей. Поскольку PostgreSQL загружает системные каталоги специфичные для базы данных, непонятно даже, как должен себя вести такой межбазовый запрос.
contrib/dblink позволяет запросы между базами, используя вызовы функций. Разумеется, клиент может одновременно также устанавливать соедиенения с различными базами данных и таких образом объединять информацию из них.

А представления тоже нельзя создавать к нескольким базам данных?
...
Рейтинг: 0 / 0
10.09.2013, 21:45
    #38392906
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
DNSharkА вот такой вопрос. Как бы есть в базе таблица архивов событий. Она очень большая и хранится в кучке более мелких таблиц, каждая таблица - свой месяц. Организовано - это через clustered .
...
Вот и думаю, а есть аналог такой constraint в Posgres ?
наверное есть , только к constraint оно не относится, в mssql облом вникать.DNSharkКак выполнять запросы, использующие несколько баз данных?
...попробуйте это .
...
Рейтинг: 0 / 0
11.09.2013, 10:18
    #38393237
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
DNSharkА вот такой вопрос. Как бы есть в базе таблица архивов событий. Она очень большая и хранится в кучке более мелких таблиц, каждая таблица - свой месяц. Организовано - это через clustered .
...
Вот и думаю, а есть аналог такой constraint в Posgres ? http://www.postgresql.org/docs/9.3/static/bookindex.html

посмотрите inheritance, partitioning

DNSharkКак выполнять запросы, использующие несколько баз данных?
...можно разнести данные в одной базе по разным схемам
...
Рейтинг: 0 / 0
11.09.2013, 16:13
    #38393776
DNShark
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
Всем спасибки). Нашел хорошую статью по разбиению таблиц.

http://romantelychko.com/blog/520/
...
Рейтинг: 0 / 0
11.09.2013, 16:20
    #38393795
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
DNSharkВсем спасибки). Нашел хорошую статью по разбиению таблиц.

http://romantelychko.com/blog/520/

" -- Проверяем партицию на существование " - тут гонка!

создавать таблицы в триггере - очень плохо
...
Рейтинг: 0 / 0
11.09.2013, 16:22
    #38393797
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
Misha Tyurin,

http://www.postgresql.org/docs/9.3/static/ddl-partitioning.html - одна из лучшиз статей по партицированию
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
05.03.2019, 15:01
    #39782536
White_Tiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт/импорт MSSQL->PostgreSQL
Господа, а кто юзал http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL насколько работоспособен инструмент? интересует конвертация исключительно таблиц (никаких хранимых процедур, вьюх и т.п. нет) насколько устойчива потом база после конвертации, нет ли потерь данных?
и ещё, сейчас она вроде как на платной основе распространяется, ни у кого нет ломаной? =)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / экспорт/импорт MSSQL->PostgreSQL / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]