2011-02-02 11 views
8

Opracowałem większość moich aplikacji w PHP-MySQL, ponieważ było to szybkie i łatwe. Teraz, z bardziej złożonymi aplikacjami i zastanawiam się, czy MySQL jest dobrym wyborem. Będę budował moją najnowszą aplikację z PostgreSQL. Jakie rzeczy muszę mieć świadomość? Czego mi brakowało podczas korzystania z MySQL?Programista PHP-MySQL przechodzący do PostgreSQL. Co muszę wiedzieć?

Odpowiedz

5

Ta strona Wiki to dobry początek:
http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#MySQL

Edycja: aby odpowiedzieć na drugą część (rzeczy, które zostały brakuje):

  • generate_series()
  • odroczeniu Ograniczenia
  • sprawdź ograniczenia
  • Zapytania rekurencyjne
  • funkcje tablicy
  • wspólny stół wyrażenia
  • okienkowe funkcje
  • funkcyjne oparte Indeks
  • cząstkowe indeksy
  • wyszukiwanie pełnotekstowe na stołach transakcyjnych
  • funkcje GIS w tabelach transakcyjnych
  • MINUS lub INTERSECT operatora

Edycja2: rzeczy może się okazać problematyczne

  • PostgreSQL jest znacznie bardziej rygorystyczne pod względem dopasowania typów danych (gdzie character_column = 1 wygeneruje błąd)
  • żadnych zapytań cross-bazy danych, jeśli trzeba coś takiego, bazy danych odwzorowania MySQL Schematy PostgreSQL jest prawdopodobnie łatwiejsze
  • Brak zmiennych w zwykłych instrukcjach SQL (set @ nr = 1; wybierz @ nr + 1 ...)
+0

Nie jestem użytkownikiem PG, więc może się mylę, ale jeśli dobrze pamiętam, sekwencje w PG są aktualizowane nawet wtedy, gdy zapytanie 'insert' nie powiedzie się (np. Jeśli wartość NULL zostanie dodana do pola innego niż NULL) . Różni się to od "auto_increment" MySQL, które jest aktualizowane tylko po pomyślnym wstawieniu. – binaryLV

+0

@binaryLV: innoDB używa blokad na auto_increment, co może być problemem. Kolejnym problemem może być reset auto_increment do aktualnej najwyższej wartości po ponownym uruchomieniu serwera. Po prostu nie można porównać auto_increment w MySQL i sekwencji w PostgreSQL lub jakiejkolwiek innej bazie danych. Różne rzeczy. –

+0

Oczywiście, są różne rzeczy, ale ludzie, którzy są przyzwyczajeni do "auto_increment" MySQL, używają sekwencji w innych DBMS do symulacji 'auto_increment'. Ponieważ autor jest przyzwyczajony do MySQL, pomyślałem, że warto zauważyć, że wyniki z sekwencjami mogą się różnić od tych z 'auto_increment'. – binaryLV

1

Przeczytaj grzywnę manual, rozdziały od 2 do 9 są najważniejsze na początek.

Upewnij się, że wykonałeś odpowiednią obsługę błędów w PHP i uważnie przeczytaj wszystkie komunikaty o błędach: W większości przypadków dokładnie wiadomo, co poszło nie tak i jak to naprawić. Załącznik A zawiera wszystkie komunikaty o błędach i kody, których potrzebujesz. PostgreSQL nie akceptuje błędnych danych wejściowych lub zapytań, jest poprawny lub pojawia się błąd podczas uruchamiania debugowania. I to jest dobre, mniej błędów i mniej czasu poświęcisz na pisanie skryptów.

pg_query_params() i pg_fetch_all() to kilka świetnych funkcji w PHP do interakcji z PostgreSQL, sprawdź PHP manual.

+0

O 'pg_query_params()' i 'pg_fetch_all()' - to kwestia gustu, oczywiście, ale użyłbym PDO - jest bardzo przydatny, gdy od czasu do czasu trzeba zmieniać DBMS. – binaryLV

+0

PDO jest przyjemny, ale nie osiągniesz najlepszej możliwej wydajności: funkcja COPY nie zadziała, bardzo szybkie wstawianie nie będzie możliwe przy użyciu PDO. Kod PHP będzie również bardziej złożony przy użyciu PDO. –

+0

Wydajność może być niższa, ale warto byłoby przetestować, czy to może być wąskie gardło. Osobiście nie miałem żadnych problemów z wydajnością z powodu PDO. O kodzie jest bardziej złożony - czy możesz wyjaśnić? – binaryLV

Powiązane problemy