2009-06-04 6 views
5

Zastanawiam się nad przełączeniem (głównie z powodu bardziej permisywnej licencji) i mam tendencję do słyszenia szumu w Internecie o tym, że o wiele lepiej Postgres jest niż MySQL, ale nie wiele szczegółów. Co robisz w Postgresie, dzięki czemu jesteś bardziej produktywny lub elegancki?Twórcy stron internetowych, którzy przełączyli się z MySQL, jakie funkcje PostgreSQL moglibyście teraz bez nich obejść?

To nie musi być wyobraźnia, na przykład niektóre z moich ulubionych rzeczy o MySQL obejmują

  • łatwy klucz podstawowy wzrastających z autoIncrement (mający napisać generator na każdym stole wydaje się bardziej uciążliwe niż powinno być dla takiego wspólnego wymogu),
  • „LIMIT, offset” wypowiedzi (pozwala na łatwe paginacji)
  • oN duplikat KEY UPDATE (ułatwia wstawianie/aktualizacja „wiele do wielu” tabele szybkie i bezbolesne)
+0

Nie korzystałem z PostgreSQL, ale ostatnio pracuję z Oracle po latach używania wyłącznie MySQL. Masz rację, AUTOINCREMENT w skałach MySQL, to ogromny problem z tworzeniem sekwencji dla każdej tabeli osobno, a następnie wstawianie seq.nextval zamiast po prostu używać NULL do wstawiania i zwiększania indeksu! –

+4

Rzeczywiście nie użyłeś PostgreSQL. Jest cukier pseudo-składniowy o nazwie "SERIAL", który jest równie łatwy w użyciu jak AUTO_INCREMENT. –

Odpowiedz

4

PostgreSQL „s najbardziej przydatnych funkcji (co MySQL brakuje), moim zdaniem, są:

  • generate_series i ustawić funkcje powracających w ogólnym
  • umiejętność wykorzystania wartości skorelowane LIMIT i OFFSET klauzul
  • niestandardowych agreguje
  • DISTINCT ON klauzula
  • Bardziej zaawansowane JOIN metod (MERGE JOIN się d HASH JOIN)

Możesz zdziałać cuda z nimi.

kod

PostgreSQL także często wygląda bardziej elegancki (zauważ, że „wygląda” nie oznacza „wykonuje”), ponieważ można użyć piękny rozstrzygający składni (::), ładne RECORD rodzajów i tego rodzaju rzeczy.

Wady to:

  • Nie można używać podpowiedzi (wiem, że to celowe, wiem, powinno być one unikać przejść downvote mnie)
  • Nie można używać zmiennych sesji bez dostępu do plików konfiguracyjnych serwera (ci trzeba ustawić custom_variable_classes)
  • DISTINCT i GROUP BY operacje są opóźnione.

Ponieważ oba te systemy są dość potężne i dobrze rozwinięte, różnią się głównie takimi fantazyjnymi funkcjami (których większość programistów nigdy nie używa).

Dla podstawowych SQL, oba są dobre.

+1

MySQL obsługuje niestandardowe funkcje agregujące napisane w języku C. SQL będzie lepszy. –

+0

@Andrew: na pewno, ale bolesne jest instalowanie ich na współdzielonym hostingu lub używanie w rozproszonych źródłowych aplikacjach internetowych. Niezły punkt. – Quassnoi

3
  • transakcyjna DDL - można zrobić "start transaction; delete table foo; rollback;" i foo będzie nadal istnieć.
+0

Jakiego rodzaju scenariuszy rozwoju sieci używasz w tej funkcji? – Dylan

+2

Używam go jako środka bezpieczeństwa prawie za każdym razem, gdy muszę zmienić produkcyjną bazę danych, aby upewnić się, że nie zrobię czegoś głupiego przez pomyłkę. Po prostu naciśniesz "Zatwierdź", gdy skończysz; jeśli nie, zawsze możesz wycofać. – Arnaud

0

PostgreSQL, za pośrednictwem PostGIS, oferuje bardzo bogate wsparcie dla operatorów geoprzestrzennych.Trudno sobie wyobrazić robienie wszelkiego rodzaju integracji map google (lub podobnych prac geoprzestrzennych) z jakimkolwiek innym DB.

+0

@TokenMacGuy: MySQL obsługuje również operacje przestrzenne: http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html – Quassnoi

+0

Operacje przestrzenne MySQL działają tylko na MyISAM, zmuszając użytkownika do użycia przestarzałego, wolnego silnik bez ACID. – peufeu

0
  • procedur przechowywanych/UDF w Perl
  • Asynchronous Database dostępu w libpq
  • schematów i baz danych, a nie bazy danych udających się schematy
  • GIN i GIST
0

Dodawanie kontrole do pól. Na przykład:

CREATE TABLE "FILES" (
    ... 
    md5checksum text NOT NULL, 
    CONSTRAINT "FILES_md5checksum_check" CHECK ((md5checksum ~* '^[a-f0-9]{32}$'::text)), 
    ... 
); 

md5checksum pole jest teraz zawsze potwierdzone, że jest to ciąg szesnastkowy i to długo 32 znaków.

Powiązane problemy