2010-01-26 7 views
9

wciąż jesteśmy całkiem nowi dla PostgreSQL i pochodzimy z Microsoft Sql Server.Przechowywane procedury w Pythonie dla PostgreSQL

Chcemy teraz zapisać niektóre procedury składowane. Cóż, po zmaganiu się z czymś bardziej skomplikowanym niż hello world do pracy w pl/pgsql, zdecydowaliśmy, że lepiej będzie, jeśli nauczymy się nowego języka, który równie dobrze możemy nauczyć się Pythona, ponieważ otrzymaliśmy to samo zapytanie w około 15. minut (uwaga, nikt z nas nie zna Pythona).

Mam więc kilka pytań na ten temat w porównaniu z pl/psql.

  1. Czy pl/Pythonu jest wolniejszy niż pl/pgsql?
  2. Czy istnieje jakieś "dobre" odniesienie do tego, jak pisać dobre procedury przechowywane za jego pomocą? Pięć krótkich stron w dokumentacji Postgresa tak naprawdę nie mówi nam wystarczająco.
  3. Co z przygotowaniem zapytania? Czy powinien być zawsze używany?
  4. Jeśli korzystamy z macierzy SD i GD dla wielu planów kwerend, czy będzie on kiedykolwiek zbyt pełny lub ma negatywny wpływ na serwer? Czy automatycznie usunie stare wartości, jeśli stanie się zbyt pełny?
  5. Czy jest jakaś nadzieja, że ​​stanie się zaufanym językiem?

Również nasze użycie procedury składowanej jest wyjątkowo lekkie. Teraz mamy tylko 4, ale wciąż próbują przekształcić małe kawałki kodu przez SQL Server określonej składni (takich jak zmienne, które nie mogą być wykorzystane w PostgreSQL poza procedur składowanych)

+0

Dlaczego tak trudno jest pisać zapisane procedury? Dlaczego nie pisać zwykłych aplikacji w Pythonie i korzystać z bazy danych jako zwykłego magazynu danych? –

+3

Ponieważ mamy już ponad 10 000 linii kodu C# już napisanych. I są pewne rzeczy, w których gdybyśmy zrobili to całkowicie w aplikacji, wymagałoby to 3 lub więcej podróży w obie strony do serwera DB, więc wolelibyśmy mieć tylko jedną podróż w obie strony, a serwer DB zrobić niewielki dodatkowy proces przetwarzania – Earlz

+0

@earlz : Zaktualizuj swoje pytanie dodatkowymi faktami. Proszę nie komentować własnego pytania. To twoje pytanie. Uczyń go kompletnym, proszę, aby inni też mogli się z niego uczyć. –

Odpowiedz

8
  1. Zależy od jakie operacje robisz.
  2. Cóż, połącz to z ogólną dokumentacją Pythona, a to o tym, co masz.
  3. Nie. Znowu zależy od tego, co robisz. Jeśli zamierzasz jednorazowo uruchomić zapytanie, nie ma sensu przygotowywać go osobno.
  4. Jeśli korzystasz z połączeń trwałych, może. Ale są usuwane za każdym razem, gdy połączenie jest zamknięte.
  5. Nie prawdopodobne. Sandboxing jest zepsuty w Pythonie i AFAIK, nikt nie jest zainteresowany jego naprawieniem. Słyszałem, jak ktoś mówi, że Python-on-papuga może być najbardziej opłacalnym sposobem, gdy już mamy pl/papugę (czego jeszcze nie mamy).

Dolna linia - jeśli twoje procedury składowane będą działały w bazie danych, użyj polecenia pl/pgsql. Używaj tylko pl/python, jeśli zamierzasz robić rzeczy niebędące bazą danych, takie jak rozmowa z bibliotekami zewnętrznymi.