Aby rozwinąć poprawną odpowiedź Marka, PostgreSQL nie przechowuje znacznika czasu wiersza ani nie przechowuje wierszy w określonej kolejności. Jeśli nie zdefiniujesz swoich tabel za pomocą kolumny zawierającej sygnaturę czasową, w której zostały wstawione, nie ma możliwości wybrania ich w kolejności, w jakiej zostały wstawione.
PostgreSQL często zwraca je w takiej kolejności, w jakiej i tak zostały wstawione, ale dzieje się tak tylko dlatego, że znajdują się w tej kolejności na dysku. Zmieni się to podczas update
s w tabeli lub deletes
później insert
s. Operacje takie jak vacuum full
również to zmienić. Nigdy, przenigdy nie powinieneś polegać na zamówieniu bez wyraźnego order by
klauzula.
Ponadto, jeśli chcesz, aby znacznik czasu wstawienia różnił się dla wierszy w ramach transakcji, możesz użyć clock_timestamp
zamiast now()
. Użyj również standardowego dla SQL current_timestamp
zamiast pisać now()
.