powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / экспорт/импорт MSSQL->PostgreSQL
17 сообщений из 17, страница 1 из 1
экспорт/импорт MSSQL->PostgreSQL
    #38126604
Фотография juwdoks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно в 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
экспорт/импорт MSSQL->PostgreSQL
    #38126644
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
juwdoks...
4. php скриптом, но даже дамп в csv для последующего импорта не получается сделать - не тянет комп (не хватает оперативки).

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

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

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

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

В конечном итоге, остановились на варианте ручной миграции. Весь код переписывается вручную. Данные можно переносить при помощи JDBC_FDW - на относительно небольших данных работает неплохо. Когда потребовалось переносить большее количество (45 млн.) - написали утилитку на ява, которая переносила данные батчами по 10 тыс. записей.
...
Рейтинг: 0 / 0
экспорт/импорт MSSQL->PostgreSQL
    #38391321
DNShark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
экспорт/импорт MSSQL->PostgreSQL
    #38391435
Фотография Константин Евтеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для переноса данных мне больше всего подошло SSIS пакеты (мастер импорта и экспорта SQL Server), а потом команда copy в postgres, только нужно разделитель какой-нибудь использовать необычный, я например брал char(15)
...
Рейтинг: 0 / 0
экспорт/импорт MSSQL->PostgreSQL
    #38392687
DNShark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот такой вопрос. Как бы есть в базе таблица архивов событий. Она очень большая и хранится в кучке более мелких таблиц, каждая таблица - свой месяц. Организовано - это через 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
экспорт/импорт MSSQL->PostgreSQL
    #38392746
DNShark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DNShark,

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

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

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

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

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

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

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

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

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

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


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