Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: Йордан в Jun 16, 2005, 22:26



Титла: PHP
Публикувано от: Йордан в Jun 16, 2005, 22:26
Здравейте,
искам да попитам нещо. Някой писал ли е на PHP приложение работещо както с MySQL така и с PostgreSQL. На мене ми идват на ум "начини" които ще доведат до огромно повтаряне на код или до много бъгав код. Ако има желаещи нека да споделят опита си

Мерси предварително за отговорите  :)


Титла: PHP
Публикувано от: в Jun 16, 2005, 23:06
Pear има модул за връзка с БазиДанни, трябва да ти свърши работа


Титла: PHP
Публикувано от: VladSun в Jun 17, 2005, 00:32
само идея:
кода на phpBB е съвместим и с двете - можеш да го разгледаш (не знам дали е само на ниво начална конфигурация съвместимостта)


Титла: PHP
Публикувано от: gamehack в Jun 17, 2005, 01:45
Дрънни ми на ICQ-то, имам няколко класчета и готова архитектура ако те интересуват  :D


Титла: PHP
Публикувано от: toxigen в Jun 17, 2005, 10:10
Ако се използва database abstraction layer - примерно Pear DB - става. Естествено трябва да се внимава заявките да са съвместими. Случват се и бъгове естествено е "крушата" е малко голословна - повечето грешки от Postgre излизат като DB Error - Unknown Error, което си дразни.


Титла: PHP
Публикувано от: Йордан в Jun 17, 2005, 13:47
daf - не на всеки сървър може да си сложиш Pear. Идеята ми е... да пиша малки скриптове и да ги пускам под GPL.

VladSun - добра идея ще пробвам

gamehack - виж си ICQ

toxigen - почти всички заявки трябва да са еднакви. Нали УЖ и двете бази данни са стандартизирани. И поне често използваните са еднакви

П.П. страшни обяснения давам тея дни


Титла: PHP
Публикувано от: toxigen в Jun 17, 2005, 15:51
Цитат
Нали УЖ и двете бази данни са стандартизирани. И поне често използваните са еднакви


Много ми се иска да беше така, но уви...
Още при създаването на таблиците се виждат СЕРИОЗНИ различия във формата на заявките (CREATE ...), особено видимо е с типовете данни. Самите типове в общия случай са аналогични (при pg има повече), но естествено се декларират по различен начин. Експорт от mysqldump --compatible=pgsql дава дъмп, който влиза в постгре след часове редакция (поне при мен беше така - нека някой ме поправи ако греша). Обратното пък е съвсем зле.
Ако използваш съхранени процедури виждаш, че синтаксиса за описването им се различава отново значително.
Голям проблем за мен се оказаха auto_increment полетата.
Има и други, но по същество:

За малки скриптчета, който работят САМО с mysql или pgsql препоръчвам две схеми за базите (за първоначално създаване), собствен abstraction layer с имплементирани само нещата, които използваш - т.е. примерно mysql_query и pgsql_query да се избират спрямо вида на базата (предполагам това е "грозно" решение, но пък затова доста просто за изпълнение)  - това може да е един файл от 300 реда, който да върви заедно със скрипта.
Естествено по метода на пробата и грешката може да се тества кои заявки имат проблем с едната или другата база и съответно да се доизгладят за пълна съвместимост.

Незнам доколко бях ясен, но дано е било полезно (вече е 16 ч. и от сорс ми се наду главата).


Титла: PHP
Публикувано от: Йордан в Jun 17, 2005, 17:05
Дам... сега откривам и разлики за които не съм знаел. Малки са но съществени. Когато някой те насочи веднага започват да те бодът в очите :) Аз ще почета още малко из документациите а някой ако има още нещо да добави - да заповяда ;)


Титла: PHP
Публикувано от: в Jun 17, 2005, 17:54
Цитат на: toxigen,Юни 17 2005,16:51
Цитат

Голям проблем за мен се оказаха auto_increment полетата.
Има и други, но по същество:


Какъв е проблема с auto_increment/serial?


Титла: PHP
Публикувано от: toxigen в Jun 18, 2005, 14:16
Теоретично не би трябвало да има проблем. Има проблем ако имаш дъмп от mysql - тогава тия полета не щат да влизат в постгре


Титла: PHP
Публикувано от: в Jun 18, 2005, 16:59
предполагам, че проблемът е при теб, защото няма логика да има такъв проблем, още повече, че postgresql-а няма auto_increment, а типът serial представлява integer с default-на стойност sequence със стъпка 1.


Титла: PHP
Публикувано от: toxigen в Jul 07, 2005, 21:42
Добре това е така. Но на мен ми се налага да конвертирам дъмп от mysql към pgsql. Ако се сещате някакъв начин да се направят съвместими моля кажете. Postgre ми вади грешки независимо, дали съм пуснал на mysqldump опцията --compatible=pgsql
mysqldump продължава да си слага неща като KEY, IF EXISTS, COLLATION etc.
Съответно pgsql се оплаква. Също така ако сте срещали свестен инструмент за администриране на pgsql - уеб базиран или multiplatform (все пак ми трябва в работата, а там освен сървърите всичко е опрозорчено) кажете.
Благодаря предварително за помощта.


Титла: PHP
Публикувано от: CaBA в Jul 14, 2005, 12:04
Цитат
Също така ако сте срещали свестен инструмент за администриране на pgsql - уеб базиран или multiplatform (все пак ми трябва в работата, а там освен сървърите всичко е опрозорчено) кажете.


pgAdmin III is a powerful administration and development platform for the PostgreSQL database, free for any use. The application is running under GNU/Linux, FreeBSD and Windows 2000/XP.
http://www.pgadmin.org/


Титла: PHP
Публикувано от: toxigen в Jul 14, 2005, 12:20
Благодаря за линка.
Нещо по повод конвертирането да се сещате?


Титла: PHP
Публикувано от: dunamis в Jul 14, 2005, 13:06
Можеш да погледнеш и това:
ADODB


Титла: PHP
Публикувано от: n_antonov в Jul 15, 2005, 00:12
Цитат (toxigen @ Юли 14 2005,15:20)
Благодаря за линка.
Нещо по повод конвертирането да се сещате?

Преди време конвертирах база данни на phpBB от mysql към pgsql. Спомням си, че имаше доста проби и грешки, след което успях успешно да импортирам базата в pgsql, като я дъмпнах със следните опции:

"--compatible=ansi --extended-insert=FALSE -c"

Виж тази дискусия.


Титла: PHP
Публикувано от: toxigen в Jul 15, 2005, 11:04
Благодаря много.

Успях да импортна и структурата на базата като конвертирах някои типове данни и auto_increment полетата, както и индексите.

Ще има малко играчка по донастройване на разни неща, но общо взето - вижда се светлина в края на тунела


Титла: PHP
Публикувано от: vic_semionov в Aug 10, 2005, 15:02
А има ли разлика между PEAR::DB и DBX functions? Ако и двете са DBMS abstraction layers, защо ги има и двете?


Титла: PHP
Публикувано от: toxigen в Aug 12, 2005, 10:55
От съображения за съвместимост. DBX е старо решение и стои само от тези съображения (ако е същото, за което се сещам.. може и да бъркам), също не се и доразвива. PEAR::DB е сегашното решение за db abstraction като с всяка версия се подобрява.