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
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 ...)
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.
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
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. –
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
- 1. Jako programista PHP myśląc o tym, aby Perl był drugorzędnym silnym kombinezonem, co muszę wiedzieć?
- 2. Co muszę wiedzieć o podpisach XML, aby uzyskać działanie SAML?
- 3. Co muszę wiedzieć, aby przenieść Cyanogenmod na nieobsługiwane telefony/tablety?
- 4. Android developer przechodzi na iOS - co muszę wiedzieć?
- 5. Jako programista, o co muszę się martwić podczas przechodzenia do 64-bitowych okien?
- 6. miejsca w .NET Framework 4, że każdy programista powinien wiedzieć
- 7. Muszę wiedzieć dokładnie, jak używać string.maketrans
- 8. Szkielet przechodzący model do routera
- 9. Czy programista Qt 5 musi wiedzieć o zmiennej qpake DEPENDPATH?
- 10. Znani wzorce projektowe, które programista C++ powinien wiedzieć
- 11. Co to jest programista FE?
- 12. Co powinienem wiedzieć, przechodząc z MIPS na x86?
- 13. jak do użytkownika funkcja nl2br z htmlspecialchars w phpmysql
- 14. Skąd mam wiedzieć, co nazwa_sprzedawcy certyfikatu?
- 15. Co muszę użyć do tworzenia gier w języku C#?
- 16. Parametr GSP przechodzący od kontrolera
- 17. Laravel 4 Formularz przechodzący 2 parametry
- 18. Co muszę zaimportować, aby uzyskać dostęp do moich modeli?
- 19. Co muszę dodać do układu, aby ukryć pasek tytułu?
- 20. Co muszę zrobić, aby przekonwertować z biblioteki klas do WCF?
- 21. Co muszę zrobić, aby zaktualizować aplikację do najnowszej wersji Rails?
- 22. Jako programista ASP.NET, czy muszę się martwić o ataki typu "email injection"?
- 23. Przyjazna programista ERP
- 24. Co muszę kodować, aby korzystać z HTTPS?
- 25. Co muszę zrobić, aby Hash.from_xml() zadziałał?
- 26. Ile wierszy kodu powinien pisać programista dziennie?
- 27. Co każdy haker Perl powinien wiedzieć o Perl -ne?
- 28. UITableView, skąd mam wiedzieć, co Sekcja podczas cellForRowAtIndexPath?
- 29. Co należy wiedzieć przy opracowywaniu interoperacyjne usługi internetowej WCF?
- 30. wiedzieć, co zdarzenie wywołało after_commit danego modelu ActiveRecord
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
@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. –
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