Andrzej
Prażmo
programista .NET,
właściciel firmy SEE
Software
Andrzej
Prażmo
programista .NET,
właściciel firmy SEE
Software
Temat: PostgreSQL i sekwencje
Zauważyłem jeszcze jedną rzecz: we wszystkich tabelach pole z autoincrementem posiada typ "serial" a tylko ta jedna felerna tabela ma typ "integer NOT NULL DEFAULT nextval('nazwa_sekwencji')".konto usunięte
Temat: PostgreSQL i sekwencje
Na nextval na określonym generatorze jest ładny nietransakcyjny lock. Stawiam na złą konfigurację ORMa.Serial to pseudotyp, który wewnętrznie jest właśnie definiowany jako 'INTEGER DEFAULT nextval('generator')'. Ale możliwe, że dla tego ORMa to są dwie różne rzeczy i czegoś nie rozumie.
Nie ma ograniczeń na wywołania nextval. Najlepiej ustaw w konfigu postgresa min_log_duration_time=0, co powinno włączyć logowanie wszystkich zapytań, odpal te inserty, które się wywalają i zobaczysz dokładnie co Postgres dostaje.Ten post został edytowany przez Autora dnia 29.01.15 o godzinie 18:17
Andrzej
Prażmo
programista .NET,
właściciel firmy SEE
Software
Temat: PostgreSQL i sekwencje
Szymon G.:
Na nextval na określonym generatorze jest ładny nietransakcyjny lock. Stawiam na złą konfigurację ORMa.
Serial to pseudotyp, który wewnętrznie jest właśnie definiowany jako 'INTEGER DEFAULT nextval('generator')'. Ale możliwe, że dla tego ORMa to są dwie różne rzeczy i czegoś nie rozumie.
Najprawdopodobniej to jest główna przyczyna. Korzystam z Symfony + Doctrine a tam ten Postgres jest tak troszkę po macoszemu potraktowany. Musiałem np. sporo googlać, żeby znaleźć rozwiązanie jak zbindować postgresowy typ timestamp with time zone z klasą DateTime, bo to, co generował automat nijak nie chciało banglać.
Nie ma ograniczeń na wywołania nextval. Najlepiej ustaw w konfigu postgresa min_log_duration_time=0, co powinno włączyć logowanie wszystkich zapytań, odpal te inserty, które się wywalają i zobaczysz dokładnie co Postgres dostaje.
Zrobiłem po prostu ALTER TABLE DROP COLUMN oraz ALTER TABLE ADD już z typem serial i działa poprawnie. Akurat w przypadku tej tabeli pkey był tylko dla zachowania integralności.
Tomasz Zadora programuję
Temat: PostgreSQL i sekwencje
Tak to jest z PHPowymi ORMami i kombajnami typu doctrine, nastawionymi na dominujący w tego typu rozwiązaniach MySQL.Problem nie w tym, że Postgres nie inkrementuje, tylko w tym, że ORM w jakiś sposób korzysta z poprzednio wygenerowanej wartości.Ten post został edytowany przez Autora dnia 30.01.15 o godzinie 08:27
Andrzej
Prażmo
programista .NET,
właściciel firmy SEE
Software
Temat: PostgreSQL i sekwencje
Tomasz Z.:
Tak to jest z PHPowymi ORMami i kombajnami typu doctrine, nastawionymi na dominujący w tego typu rozwiązaniach MySQL.
MySQL dla mnie ma jedną podstawową wadę: brak typu GUID. Autoincrement jest dobry, dopóki nie chcemy przenieść części danych z jednej bazy do drugiej. Miałem taki problem, gdy chciałem przenieść artykuły z jednej Joomli do drugiej. To był koszmar.
Tomasz Zadora programuję
Temat: PostgreSQL i sekwencje
MySQL ma swoje zalety/wady a PostgreSQL swoje. Co do przenoszenia bazy MySQL i problemów z autoincrement, to można to załatwić odp. komendami:http://dev.mysql.com/doc/refman/5.7/en/example-auto-in...
Andrzej
Prażmo
programista .NET,
właściciel firmy SEE
Software
Temat: PostgreSQL i sekwencje
Tomasz Z.:
MySQL ma swoje zalety/wady a PostgreSQL swoje. Co do przenoszenia bazy MySQL i problemów z autoincrement, to można to załatwić odp. komendami:
http://dev.mysql.com/doc/refman/5.7/en/example-auto-in...
Akurat w przypadku Joomli jest inny problem. Ten CMS posiada pewną specjalną tabelę, która przechowuje całą strukturę Joomli (kategorie, artykuły, komponenty, pluginy, szablony, itd.) w postaci drzewiastej. Przeniesienie np. artykułów z jednej Joomli do drugiej w praktyce wymaga zaktualizowania również tej tabeli. Gdyby były GUIDy, to sam proces przenoszenia byłby trywialny, do załatwienia paroma poleceniami SQL, przy autoincrementach zaczyna się koszmar, bo identyfikatory najczęściej nie są unikalne w kontekście dwóch baz.
Podobne tematy
-
Bazy Danych » [postgresql] Sekwencje po restorze -
-
Bazy Danych » zapytanie w PostgreSQL -
-
Bazy Danych » [PostgreSQL] zliczanie wystąpienia wartości dodatnich... -
-
Bazy Danych » Postgresql - widok i wydajność, pytanie -
-
Bazy Danych » [Ogłoszenie] Poszukiwany trener PostgreSQL -
-
Bazy Danych » [postgreSQL] Ostatni i przed... -
-
Bazy Danych » PostgreSQL 9.1 nie używa indeksów -
-
Bazy Danych » Postgresql 8.3 - błąd przy starcie serwera !! -
-
Bazy Danych » pytanie o widoki w postgresql (POSTGIS) i unikalny klucz -
-
Bazy Danych » Czy da sie zrobic tablice asociacyjna w postgreSQL ? -
Następna dyskusja: