Toon posts:

Postgres restore na een pg_dumpall

Pagina: 1
Acties:

Vraag

Voor thuis gebruik ik @Firefly III om financien inzichtelijk te krijgen. Het systeem draait op 2 docker containers, applicatie + database. De database is een postgres:10-alpine container.

Als backup gebruikte ik pg_dumpall om de hele db naar een SQL plaintext bestand weg te schrijven. Ik heb ooit een restore nodig gehad en dat is op een of andere manier gelukt. Helaas, nu totaal niet meer :X :')

Het backup "script":
docker exec \
-t firefly-iii-db \
pg_dumpall -c -U firefly \
> backups/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql


Dan een restore:
docker exec -i firefly-iii-db psql -U firefly  < $1


Een backup file begint dan als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
--
-- PostgreSQL database cluster dump
--

SET default_transaction_read_only = off;

SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;

--
-- Drop databases
--

DROP DATABASE firefly;

--
-- Drop roles
--

DROP ROLE firefly;

--
-- Roles
--

CREATE ROLE firefly;
ALTER ROLE firefly WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'asd1234hihiditishemniet';

--
-- Database creation
--

CREATE DATABASE firefly WITH TEMPLATE = template0 OWNER = firefly;
REVOKE CONNECT,TEMPORARY ON DATABASE template1 FROM PUBLIC;
GRANT CONNECT ON DATABASE template1 TO PUBLIC;

\connect firefly

SET default_transaction_read_only = off;

Dit lukt niet door de melding "cannot drop de currently open database":
SET
SET
SET
ERROR:  cannot drop the currently open database
ERROR:  current user cannot be dropped
ERROR:  role "firefly" already exists
ALTER ROLE
ERROR:  database "firefly" already exists
REVOKE
GRANT
You are now connected to database "firefly" as user "firefly".


Ik heb mn container + volume al eens weggegooid om een verse schone install vanuit de applicatie te krijgen. Ik heb de database via CLI weggegooid (psql DROP DATABASE) maar toen kreeg ik helemaal niets meer voor elkaar.

Ik zie wel oplossingen met pg_dump en pg_restore, maar daar is het nu te laat voor: ik heb met pg_dumpall wel alles in een SQL script staan maar nu met een verwijderde database kan ik geen pg_dump meer draaien...


De vraag is nu, kan ik bijv mijn output van pg_dumpall in een ander format krijgen zodat ik pg_restore kan gebruiken? Of kan ik de output van pg_dumpall zo aanpassen dat psql het slikt? Of moet ik nog eea voorbereiden met eigen commando's voordat ik een psql op deze dump kan toepassen?

AanvullingIk heb alle create table statements uit de sql gehaald en nogmaals een psql gedraaid met dus alleen de data. Ik kreeg wel wat errors op duplicate keys, dus ben nog niet helemaal overtuigd, maar het lijkt wel te lukken (ik kan inloggen met mijn credentials en zie data) dus wellicht is dit een prima hack geweest, maar ben nog niet gerust op dat dit een stabiele oplossing is ;)

[Voor 7% gewijzigd door mithras op 14-07-2020 16:10]

Alle reacties


  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 04-12 22:00

Hero of Time

Moderator LNX

There is only one Legend

Je logt in met een gebruiker die je opnieuw rechten wit toekennen. Dat werkt natuurlijk niet. Dat kan je alleen doen als je een andere gebruik bent, zoals de postgres gebruiker.

Is er een reden waarom je dumpall gebruikt ipv gewoon dump? Want je hebt maar 1 database, het is niet nodig om de systeemdatabase ook nog te dumpen, er staat niets zinvols in.

Als je in de toekomst weer zoiets doet en de database dropt buiten het script om, gebruik dan de -C optie om de doeldatabase aan te maken als deze niet bestaat. Zie de help uitvoer hiervan of de man-page voor meer informatie.

Standaard kan je trouwens met pgdump prima een restore doen. Maar de structuur van pgdumpall is anders, omdat het alle rollen e.d. erbij heeft ipv alleen je database. Die paar dingetjes kan je ook zelf regelen als dat nodig is, dus maak gewoon een normale dump ipv een volledige dump met alles van de server. Vergeet niet om de databasenaam op te geven bij de dump.

Commandline FTW | Tweakt met mate




Google Pixel 7 Sony WH-1000XM5 Apple iPhone 14 Samsung Galaxy Watch5, 44mm Sonic Frontiers Samsung Galaxy Z Fold4 Insta360 X3 Nintendo Switch Lite

Tweakers is samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer onderdeel van DPG Media B.V.
Alle rechten voorbehouden © 1998 - 2022 Hosting door True

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee