<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - [SOLVED] ERROR:  timestamp out of range]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=1376</link>
		<description><![CDATA[Najświeższe odpowiedzi w [SOLVED] ERROR:  timestamp out of range.]]></description>
		<lastBuildDate>Mon, 10 Sep 2012 07:07:25 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: [SOLVED] ERROR:  timestamp out of range]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3692#p3692</link>
			<description><![CDATA[Rozwiązałem problem. Do wydobycia wadliwych rekordów użyłem takiego zapytania do bazy:

[code]
select id from tabela where created_at < '1 Jan 2000' or created_at > '1 Jan 9999' or updated_at > '1 Jan 9999' or updated_at < '1 Jan 2000';
[/code]

Do zrzucenia bazy danych użyłem zwykłego przekierowania na STDOUT (pg_dump dalej wyrzucał błąd).

[code]
psql -d baza_danych -t -A -c "select * from tabela where id not in (select id from tabela where created_at < '1 Jan 2000' or created_at > '1 Jan 9999' or updated_at > '1 Jan 9999' or updated_at < '1 Jan 2000');" > tabela_10_09_2012.output
[/code]

Teraz pozostało tylko usunąć ręcznie wszystkie rekordy, które mają id < 0 i puste pola (lub inne śmieci w miejscu danych), a następnie przywrócić wszystkie dane do tej samej tabeli robiąc wcześniej na niej [b]TRUNCATE[/b].]]></description>
			<author><![CDATA[dummy@example.com (crh)]]></author>
			<pubDate>Mon, 10 Sep 2012 07:07:25 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3692#p3692</guid>
		</item>
		<item>
			<title><![CDATA[[SOLVED] ERROR:  timestamp out of range]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3690#p3690</link>
			<description><![CDATA[Witam,

Mam problem ze zrobieniem dump'a jednej z tabel.

Przeszukiwanie rekordów w tej tabeli kończy się: [b]ERROR:  invalid page header in block 5546 of relation base/190483380/224917468[/b], dlatego włączyłem bazę z ustawionym [i]zero_damaged_pages=on[/i]. Postgres wyzerował wadliwe pliki, ale pozostał kolejny problem, mianowicie po próbie przeliczenia rekordów: [b]select count(*) tabela;[/b] dostaję

[code]
ERROR:  timestamp out of range
[/code]

W tabeli są dwie kolumny przechowujące timestamp: [b]created_at[/b] i [b]updated_at[/b]. Jeśli zrobię [b]select count(id) tabela;[/b] to poprawnie przelicza liczbę rekordów.

Na serwerze robiony jest codziennie backup, który zajmuje prawie 5GB. Gdy zrobiłem [b]pg_dump -t tabela baza_danych > tabela_baza_danych.sql[/b] to w pliku znalazło się tylko część rekordów a na końcu jest [b]./[/b]

Jak mogę zidentyfikować wadliwe rekordy i je usunąć? Może ktoś zna jakieś najlepsze rozwiązania jak radzić sobie z naprawianiem dużych baz danych.

Pozdrawiam,
Łukasz]]></description>
			<author><![CDATA[dummy@example.com (crh)]]></author>
			<pubDate>Sun, 09 Sep 2012 10:20:58 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3690#p3690</guid>
		</item>
	</channel>
</rss>
