Поддержка PostgreSQL в Корпорации 2

2 ноября 2009

Итак, в качестве основной базы данных мы будем использовать - PostgreSQL. Но, при этом, все равно тестироваться и работать должно будет в MySQL и Firebird.

Поэтому, в необходимо приходить к стандартам, которые устроит как MySQL так и PostgreSQL.

Рассмотрим для примера запрос:

select MK.KARTA_ID, MK.P_BALANS, MK.P_VLASN, MK.P_ZALOG, MK.P_UGON,

MK.MARKA_ID MARKA_ID,MK.VID_ID, MK.ZAV_NOMER ZAV_NOMER, MK.DVIG_NOMER DVIG_NOMER, MK.NSHAS, MK.YEAR_PROD, MK.SER_SVID SER_SVID, MK.DATA_SVID, MK.SER_ZNAK, MK.DATE_NUM, MK.KOD_F, MK.KOD_USER, MK.OLD_ID, MK.DATA_EDIT, MK.DATE_INSERT, MK.DATE_DELETE, MK.IS_DELETED, MK.DATE_COMPILE, MK.DATE_UPDATE, MK.ID_REGION_KOD ID_REGION_KOD, MK.ID_RAJON ID_RAJON, MK.ID_VID, MK.ID_KOD_F, MK.NAME_ORG NAME_ORG, MK.NAME_VID NAME_VID, MK.UPPER_ZAV_NOMER, MK.UPPER_DVIG_NOMER, MK.UPPER_NSHAS, MK.UPPER_SER_SVID, MK.UPPER_SER_ZNAK, MK.DATA_SPISAN, MK.ADDR_ORG, MK.P_REG, MK.DATA_FIRST_REG, MK.D_OLDSVID, MK.N_OLDSVID, MK.YEAR_SVID, MK.YEAR_NUM, MK.YEAR_SPISAN, MK.YEAR_FIRST_REG,MK.YEAR_

OLDSVID, MK.DATA_BALANS, MK.REGION_BALANS, MK.RAJON_BALANS, R.REGION_NAME, MO.KOD_EDRPO, MO.N_PASSP from MTP_KARTA MK

left join TBLREGIONS R

on MK.ID_REGION_KOD=R.ID_REGION_KOD

left join MTP_ORG MO

on (MK.ID_KOD_F=MO.ID_KOD_F)

and (MK.ID_REGION_KOD=MO.ID_REGION_KOD)

where (MK.MARKA_ID<>') and (MK.DATA_SPISAN is null)

and(MK.NAME_ORG like '%трактор%')

order by MARKA_ID

limit 0, 50

Данный запрос прекрасно работает в MySQL, но совершенно не работает в PostgreSQL.

Чтоб работаело и там и там нужно писать на подобии:

select MK.KARTA_ID, MK.P_BALANS, MK.P_VLASN, MK.P_ZALOG, MK.P_UGON,

MK.MARKA_ID as MARKA_ID,

MK.VID_ID,

MK.ZAV_NOMER as ZAV_NOMER,

MK.DVIG_NOMER as DVIG_NOMER, MK.NSHAS, MK.YEAR_PROD,

MK.SER_SVID as SER_SVID, MK.DATA_SVID, MK.SER_ZNAK, MK.DATE_NUM, MK.KOD_F, MK.KOD_USER, MK.OLD_ID, MK.DATA_EDIT, MK.DATE_INSERT, MK.DATE_DELETE, MK.IS_DELETED, MK.DATE_COMPILE,

MK.DATE_UPDATE, MK.ID_REGION_KOD as ID_REGION_KOD,

MK.ID_RAJON as ID_RAJON, MK.ID_VID, MK.ID_KOD_F,

MK.NAME_ORG as NAME_ORG,

MK.NAME_VID as NAME_VID, MK.UPPER_ZAV_NOMER,

MK.UPPER_DVIG_NOMER, MK.UPPER_NSHAS, MK.UPPER_SER_SVID, MK.UPPER_SER_ZNAK, MK.DATA_SPISAN, MK.ADDR_ORG, MK.P_REG, MK.DATA_FIRST_REG, MK.D_OLDSVID, MK.N_OLDSVID, MK.YEAR_SVID, MK.YEAR_NUM, MK.YEAR_SPISAN, MK.YEAR_FIRST_REG,MK.YEAR_OLDSVID, MK.DATA_BALANS, MK.REGION_BALANS, MK.RAJON_BALANS, R.REGION_NAME, MO.KOD_EDRPO, MO.N_PASSP

from MTP_KARTA MK

left join TBLREGIONS R

on MK.ID_REGION_KOD=R.ID_REGION_KOD

left join MTP_ORG MO

on (MK.ID_KOD_F=MO.ID_KOD_F)

and (MK.ID_REGION_KOD=MO.ID_REGION_KOD)

where (MK.MARKA_ID<>') and (MK.DATA_SPISAN is null)

and(MK.NAME_ORG like '%трактор%')

order by MARKA_ID

limit 50 offset 10

В чем отличие ?

1. Псевдоним поля задается через as: MK.ZAV_NOMER as ZAV_NOMER

2. В Limit указывается

не: limit 10,50

а: limit 50 offset 10

Такие конструкции работают как в mysql, так и в postgresql. У меня есть подозрение, что они есть стандартом SQL, т.е. вероятность срабатывания и в других серверах высокая.

02.11.09, 23:31

Написать комментарий

Адрес и телефон
E-mail: rs@corp2.net Skype: rudjuk
г. Киев, ул. Белорусская 30, офис. К2Р (схема проезда)
Мы в сети
Меню
www.megastock.ru Здесь находится аттестат нашего WM идентификатора 000000000000
Проверить аттестат
Наверх