<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - [SOLVED] ERROR:  timestamp out of range]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1376&amp;type=atom"/>
	<updated>2012-09-10T07:07:25Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1376</id>
		<entry>
			<title type="html"><![CDATA[Odp: [SOLVED] ERROR:  timestamp out of range]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3692#p3692"/>
			<content type="html"><![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].]]></content>
			<author>
				<name><![CDATA[crh]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1455</uri>
			</author>
			<updated>2012-09-10T07:07:25Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3692#p3692</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[[SOLVED] ERROR:  timestamp out of range]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3690#p3690"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[crh]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1455</uri>
			</author>
			<updated>2012-09-09T10:20:58Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3690#p3690</id>
		</entry>
</feed>
