<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=1203</link>
		<description><![CDATA[Najświeższe odpowiedzi w Przeniesienie baz danych z Postgres 8.3 na 9.1.]]></description>
		<lastBuildDate>Wed, 25 Jan 2012 13:38:47 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3381#p3381</link>
			<description><![CDATA[Już wiem na czym głównie polegał mój błąd. Sprawa tyczyła się ról i tego, której roli używałem przy odtwarzaniu archiwum. Wynikało to z faktu, iż właścicielem bazy danych, którą chciałem przepisać był inny użytkownik i tak jak przy tworzeniu dump'a nie było problemów tak przy odtwarzaniu trochę się zakręciłem. Utworzyłem role w Postgres'ie 9.1 jednak przy odtwarzaniu kiedy łączyłem się z inną bazą podawałem nie jej właściciela (jak powinienem w polu --username) tylko właściciela tworzonej bazy.

Strasznie dziękuję za pomoc, bo twoje uwagi naprowadziły mnie na poprawne rozwiązanie.

Co do dokumentacji to używałem głównie helpów, które wyświetlają się kiedy wpiszemy opcje --help przy poleceniach.

Edit:

 Gdyby ktoś miał podobne problemy, to podaje rozwiązanie, które wydaje mi się poprawne:
 - korzystając z pg_dump z wersji Postgres 9.1 (nie wiem czy ma to znaczenie, ale tego używałem), mając uruchomioną usługę Postgres 8.3, pozostałe jakie mam wyłączone wykonałem dumpa przy pomocy polecenia:

 pg_dump --format=plain --file=plik.sql --host=localhost --port=5440 --username=uzytkownik --password --create baza

gdzie użytkownik to nazwa roli właściciela zrzucanej bazy danych, host i port oczywiście do Postgres 8.3

 następnie wyłączyłem usługę Postgres 8.3, włączyłem 9.1 i wykonałem polecenie (również przy użyciu binarki z wersji 9.1)

 psql --file=plik.sql --host=localhost --port=5432 --username=postgres --password postgres
gdzie postgres jest nazwą roli właściciela bazy postrgres (przepraszam, że tak samo się nazywa rola i baza, ale to ustawienia domyślne), host i port oczywiście na wersję Postgres 9.1]]></description>
			<author><![CDATA[dummy@example.com (Nissyre)]]></author>
			<pubDate>Wed, 25 Jan 2012 13:38:47 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3381#p3381</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3380#p3380</link>
			<description><![CDATA[[quote=Nissyre]W tym przypadku otrzymuję komunikat o błędzie krytycznym dotyczącym braku bazy danych nazwabazy - co już jest dziwne ze względu na to że pierwsze instrukcję w pliku zawierają jej utworzenie. Uznałem jednak, że może to tylko jakiś drobny błąd i utworzyłem bazę przy pomocy pgAdmina, jednak wtedy na przekór błąd mówił mi o tym, że baza już istnieje i nie można wykonać zapytania.[/quote]

Podczas przywracania (tworzenia) bazy via psql, ten z kolei potrzebuje nawiązać połączenie z [b]jakąś[/b] istniejąca bazą danych np, template1, postgres, a następnie dopiero z jej poziomu wykonać CREATE DATABASE NazwaBazy i dalsze polecenia (istniejące bazy możesz sprawdzić via psql -l albo \l wewnątrz, ew. zapytaniem Select datname From pg_database Order By datname;), ew. mozesz uzyć też opcji --clean w pg_dump. Piszesz o błędach składni, możesz wypisać co to z błędy ? Jeśli nie jest dużo i są względnie proste do poprawienia, to wystarczy poprawić sam zdumpowany plik SQL (oczywiście nie trzeba ręcznie), a następnie ponownie wczytać plik via wspomniany psql, a potem będziesz mógł już tworzyć backupy w formacie takim jaki chcesz (dla wersji 9.1).

[quote=Nissyre]Możliwe, że robię coś źle. Niestety nie znam nikogo kto by znał się na temacie, a sam wiem tyle co przeczytałem w internecie.[/quote]

Polecam zajrzeć do dokumentacji Postgres'a np. [url]http://www.postgresql.org/docs/8.3/static/app-pgdump.html[/url] tam jest wszystko co trzeba.]]></description>
			<author><![CDATA[dummy@example.com (gszpetkowski)]]></author>
			<pubDate>Wed, 25 Jan 2012 12:46:08 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3380#p3380</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3379#p3379</link>
			<description><![CDATA[Przetestowałem 2 metody:
1. Używając pgAdmina:
  - wykonałem kopię zapasową, format plain, dodatkowo zaznaczyłem opcję aby umieścić instrukcję CREATE DATABASE
  - przy próbie przywrócenia tak utworzonego archiwum, po wczytaniu pliku typ archiwum nie był rozpoznawany
2. Korzystając z pg_dump i psql 
 - uruchomiłem usługę Postgresql 8.3 (9.1 wyłączona)
 - użyłem pg_dump --format=plain --create --host=localhost --port=5440 --username=... --password --file=plik nazwabazy
 - podałem hasło i archiwum poprawnie się zapisało na dysku
 - zatrzymałem usługę Postgresql 8.3 i uruchomiłem 9.1
 - wywołałem psql --file=plik [połaczenie do bazy danych jak wyżej ze zmianą portu]
 W tym przypadku otrzymuję komunikat o błędzie krytycznym dotyczącym braku bazy danych nazwabazy - co już jest dziwne ze względu na to że pierwsze instrukcję w pliku zawierają jej utworzenie. Uznałem jednak, że może to tylko jakiś drobny błąd i utworzyłem bazę przy pomocy pgAdmina, jednak wtedy na przekór błąd mówił mi o tym, że baza już istnieje i nie można wykonać zapytania.

Edit:

 Wykonałem jeszcze 1 test, według schematu drugiego z tym, że nie korzystałem z opcji --create przy tworzeniu pliku, w zamian za to utworzyłem bazę w pgAdminie, ustawiłem jej odpowiedniego właściciela, następnie użyłem psql z dodatkową opcją --dbname=nazwabazy. Jednak wyrzucane są błędy składni przy każdym rekordzie danych. 

Możliwe, że robię coś źle. Niestety nie znam nikogo kto by znał się na temacie, a sam wiem tyle co przeczytałem w internecie.]]></description>
			<author><![CDATA[dummy@example.com (Nissyre)]]></author>
			<pubDate>Wed, 25 Jan 2012 10:54:04 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3379#p3379</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3378#p3378</link>
			<description><![CDATA[Nie bardzo rozumiem o jakim archiwum piszesz, plain SQL (pg_dump -Fp) powinien wyprodukować zwykły plik tekstowy, przy czym pg_restore o ile mnie wiadomo tego nie obsłuży, natomiast można użyć psql'a żeby bezpośrednio wczytać SQL'a.]]></description>
			<author><![CDATA[dummy@example.com (gszpetkowski)]]></author>
			<pubDate>Tue, 24 Jan 2012 17:29:53 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3378#p3378</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3376#p3376</link>
			<description><![CDATA[Niestety po wytworzeniu archiwum z opcja plain Postgres 9.1 zachowuje się jakby nie rozpoznawał typu archiwum co wywołuje błąd.]]></description>
			<author><![CDATA[dummy@example.com (Nissyre)]]></author>
			<pubDate>Tue, 24 Jan 2012 15:30:59 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3376#p3376</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3375#p3375</link>
			<description><![CDATA[Może spróbuj zrobić eksport/import z użyciem formatu SQL (pg_dump plain i psql -f), w razie błędów Postgres powinien wypisać co się nie zgadza.]]></description>
			<author><![CDATA[dummy@example.com (gszpetkowski)]]></author>
			<pubDate>Tue, 24 Jan 2012 14:24:14 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3375#p3375</guid>
		</item>
		<item>
			<title><![CDATA[Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3373#p3373</link>
			<description><![CDATA[Witam wszystkich.
 Mój problem wygląda następująco:
 - współtworzony przeze mnie program korzystał przez długi czas z wersji PostgreSQL 8.3
 - podczas instalacji by użytkownik nieznający się na komputerach nie musiał zastanawiać się nad instalacją serwera bazy danych wykorzystywany był cichy instalator msi,
 - z powodu problemów instalacji PostgreSQL 8.3 np na Windows Server 2008, jak i braku wersji x64 PostgreSQL 8.3 postanowiłem zmienić używaną dotychczas wersję serwera na nowszą
 - niestety podczas poszukiwania informacji na temat przeniesienia danych z wersji 8.3 na 9.1 natknąłem się na informację 

"For Windows users, note that due to different integer datetimes settings used by the one-click installer and the MSI installer, it is only possible to upgrade from version 8.3 of the one-click distribution to version 8.4 or later of the one-click distribution. It is not possible to upgrade from the MSI installer to the one-click installer."

Źródło: [url]http://www.postgresql.org/docs/devel/static/pgupgrade.html[/url]

Próbowałem mimo tego przenieść bazy danych przy pomocy pg_dump oraz pg_restore (również testowałem wersję z opcją --inserts). Niestety bez powodzenia. Użycie pg_upgrade również kończy się niepowodzeniem ze względu na niezgodność 

"Also, the default datetime storage format changed to integer after PostgreSQL 8.3. pg_upgrade will check that the datetime storage format used by the old and new clusters match. Make sure your new cluster is built with the configure flag --disable-integer-datetimes."

Źródło: jw.

 Moje pytanie brzmi jak sobie z tym problemem poradzić? Jeśli dobrze rozumiem moim rozwiązaniem byłoby korzystanie z wersji PostgreSQL 9.1 budowanej z opcją --disable-integer-datetimes jednak nie wiem skąd w taką wersję mógłbym się zaopatrzyć. Może ktoś spotkał się z podobnym problemem i udało mu się go rozwiązać. Może jest jednak jakieś rozwiązanie, które pozwoli obejść wyżej wymienione problemy. Myślałem jeszcze nad eksportem bazy (schematu i danych) do XML'a i odtwarzaniu jej na podstawie tych danych, jednak wydaje mi się, że to rozwiązanie byłoby bardzo powolne.

Z góry dziękuje za wszelkie wskazówki.]]></description>
			<author><![CDATA[dummy@example.com (Nissyre)]]></author>
			<pubDate>Tue, 24 Jan 2012 13:03:42 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3373#p3373</guid>
		</item>
	</channel>
</rss>
