abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 23:22 | Zajímavý článek

Ben Cox v článku Jak psát ovladače nepodporovaných USB zařízení pro uživatelský prostor ukazuje, jak reverzním inženýrstvím dospěl k vlastnímu ovladači userspace-vga2usb pro převodník a frame grabber Epiphan VGA2USB LR s již nepodporovaným linuxovým ovladačem od výrobce.

Fluttershy, yay! | Komentářů: 0
včera 22:44 | Zajímavý software

Multiplatformní nástroj Sourcetrail pro analýzu zdrojových kódů a jejich vizualizaci byl uvolněn jako open source. Představení nástroje na YouTube. Zdrojové kódy jsou k dispozici na GitHubu pod licencí GNU GPL 3.0. Další vývoj lze podpořit na Patreonu.

Ladislav Hagara | Komentářů: 0
včera 15:55 | Zajímavý článek

Nadace Raspberry Pi vydala knihu (YouTube) s názvem Retro Gaming with Raspberry Pi. Elektronická kniha je ke stažení zdarma (pdf). Tištěnou verzi lze koupit za 10 liber.

Ladislav Hagara | Komentářů: 0
17.11. 14:00 | Zajímavý projekt

Vítězným projektem letošního ročníku soutěže určené vývojářům open source hardwaru Hackaday Prize se stal modulární senzorový systém FieldKit.

Ladislav Hagara | Komentářů: 4
16.11. 15:44 | Nová verze

Byl vydán Debian 10.2, tj. druhá opravná verze Debianu 10 s kódovým názvem Buster. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 10 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

Ladislav Hagara | Komentářů: 1
15.11. 13:22 | Zajímavý článek

Na stránkách spolku OpenAlt vyšel Rozhovor s Jaroslavem Tulachem o GraalVM – o kompilátoru umožňujícím v jednom programu kombinovat různé jazyky (Java, JavaScript, Ruby, R, C, C++, Fortran, Rust aj.), překládat do nativních binárek nebo si snadno vytvořit vlastní jazyk a použít při tom stávající ekosystém (debugger, profiler, IDE atd.).

xkucf03 | Komentářů: 0
15.11. 11:55 | Komunita

Bylo spuštěno předobjednávání linuxových chytrých telefonů PINEPHONE v limitované edici BraveHeart. Cena telefonu je 149 dolarů. Cena dopravy do Česka je 15 dolarů. Telefony by mely být odesílány na přelomu prosince a ledna.

Ladislav Hagara | Komentářů: 25
15.11. 02:22 | Pozvánky

Fedora 31 Release Party, tj. oslava nedávného vydání Fedory 31, se uskuteční ve středu 20. listopadu v Brně. Program přednášek bude upřesněn.

Ladislav Hagara | Komentářů: 5
15.11. 01:11 | Nová verze

Příspěvek na blogu webové aplikace pro spolupráci na zdrojových kódech pomocí gitu Gitea (Wikipedie) představuje novinky a ukazuje náhledy nové major verze 1.10.0 této v programovacím jazyce Go naprogramované aplikace. Nově jsou například vedle sebe zobrazovány původní a nové verze obrázků.

Ladislav Hagara | Komentářů: 0
14.11. 22:33 | IT novinky

Společnost Docker stojící za stejnojmennou kontejnerovou technologií čelila vážným finančním problémům. Stávající investoři do ní ale vložili dalších 35 milionů dolarů a společnost Mirantis odkoupila Docker Enterprise.

Ladislav Hagara | Komentářů: 0
Jaké hodinky nosíte (nejčastěji)?
 (25%)
 (5%)
 (16%)
 (54%)
Celkem 237 hlasů
 Komentářů: 18, poslední včera 18:28
Rozcestník

www.AutoDoc.Cz

Dotaz: Synchronizace struktur databazí v PostgreSQL

11.5. 10:29 ZAH | skóre: 42 | blog: ZAH
Synchronizace struktur databazí v PostgreSQL
Přečteno: 559×
Potřebuji synchronizovat struktury databáze. Pokud možno bez negativních dopadů do dat. Jde tři databáze vývojovou, instalační a s kompletními daty.

Ve vývojové mám jen data na pokusy a hraju si s ní.Instalační by měla obsahovat pouze data nutná pro čistou instalaci databáze. Poslední obsahuje kompletní data firmy přenesená ze starého systému. Ztráta jakýchkoliv data tudíž není kritická, ale zdržuje.

Budu vděčný za nakopnutí správným směrem. ZAH

Řešení dotazu:


Odpovědi

11.5. 11:22 Kit | skóre: 43 | Brno
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
Nejprve si definuj, co na čem závisí. Udělal bych to formou exportů a importů. Dá se tak definovat, kterou komponentu chceš kopírovat kompletně (např. číselníky) a ze které pouze strukturu.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 11.5. 11:31 Josef Kufner | skóre: 69
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
To, co chceš, není synchronizace, ale migrace. Pro každou změnu struktury databáze si napíšeš skript, který požadovanou změnu provede. Ten skript spustíš na vývojové databázi, a když to funguje, tak pak později i na produkční databázi. Tím budeš mít na obojím provedeny stejné změny. Výhodou je, že taková migrace může také konvertovat data.

V opačném směru to je jednodušší, to prostě vývojovou či testovací databázi smažeš a nakopíruješ tam produkční. Obvykle je vhodné data anonymizovat, nebo ještě lépe zkopírovat jen strukturu a nagenerovat si anonymní data. Používá se ještě staging prostředí, kde se testuje na kopii produkčních dat těsně před nasazením do produkce.

Migrace můžeš používat i k inicializaci databáze, kde nultá migrace importuje nějaký postarší základ a následující migrace to posunou do aktuální podoby. V kombinaci se seedem (generátorem dat) se tento přístup hodí k nastavení lokálního vývojového prostředí.

Migrace krom změn v databázi musí udělat ještě jednu věc, každá si musí poznamenat, že se spustila a byla provedena. Migrační nástroje to typicky nějak řeší. Nejlepší je, když si to ten nástroj poznamená do extra tabulky v databázi (ta tabulka pak v podstatě obsahuje verzi databáze).

Docela rozumný je například Phinx.
Hello world ! Segmentation fault (core dumped)
11.5. 12:06 ZAH | skóre: 42 | blog: ZAH
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
Souhlas9m s migrací verzí u koncového zákazníka pro vývoj mi to připadá poněkud těžkopádné. Má představu asi takto , ve vývojové databázi si hraju nakonec provedu export struktury. U druhých dvou databází provedu export dat a poté je asi smáznu provedu import nové struktury a následně import dat. Celé to nějak zautomatizovat a ošetřit alespoň základní problémy při importu dat. Opakuji, při ztráta části nebo úplná dat není tragédií, ale zdržuje.

Jinak díky na Phinx se podívám a dám zprávu. I když předpokládám, že nejlepší cestou bude zpracovat logy změn.
  V posgresql.conf zapnout
 
  log_statement = 'ddl'

  egrep -i "create|alter|drop" pg_server.log 
 
. Výsledek podhodit psql nebo něčemu podobného.

Jen bych nerad vynalézal a hlavně testoval kolo, a tak zjišťuji něco hotového.

Josef Kufner avatar 11.5. 12:43 Josef Kufner | skóre: 69
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
Nijak těžkopádné to není. Na začátku, když si hraješ, tak ty tabulky na produkci obvykle vůbec neexistují, takže si je prostě naklikáš, poladíš a do migrace dáš create table příkazy získané exportem z té experimentální databáze (a tu pak zahodíš). Přidaná práce víceméně žádná.

Když pak děláš změny, tak už víš, co chceš a při provádění změn si průběžně odkopírováváš spouštěné příkazy. Většina klientů ti je ukáže. Tady nějaký overhead je, ale je to jen o vytvoření souboru a trochy ctrl+c, ctrl+v. Výhodou je, že když zjistíš, že jsi se někde seknul, tak můžeš prostě tu migraci upravit a nemusíš to klikat celé znovu.

Třetí scénář je, že už databázi máš a nevíš, co chceš (např. hledání té správné optimalizace). Pak si prostě chvíli hraješ, vývojovou databázi rozdrbeš, zahodíš a hraješ si znovu. Když zjistíš, co chceš, změny bývají na pár příkazů, které nakopíruješ do migrace.

Také velmi rychle narazíš na to, že některé změny chceš zachovat a jiné nikoliv. Ukecat automatický nástroj je prostě obtížné a zdržuje to. Oproti tomu při ručním kopírování SQL příkazů ty chtěné zkopíruješ a ty nechtěné ne.

Užitečné je automatizovat obnovení lokální vývojové databáze do produkčního stavu (je to jeden skript s importem dumpu). Hodí se příkaz na vytvoření prázdné migrace. A pak je nutnost mít automatizované provádění migrací (z ručního spuštění). Ideální je ještě navázat jednoduchou sadou testů, které oťukají, že nové schema dává smysl a je konzistentní s kódem.

Při běžném vývoji se mi ani nijak moc neosvědčily nástroje na porovnávání databází. Užitečnější je mít log spouštěných příkazů a případně export pro větší změny. Pak to ručně poskládat do migrace a spustit na to testy. Na první pohled se to sice zdá pracnější, ale ušetří to spoustu času právě svou jednoduchostí a hlavně předvídatelností.

Obrovskou výhodou tohoto přístupu je snadná integrovatelnost s continuous integration a verzováním. Ty migrace prostě hodíš do Gitu spolu s ostatním kódem a až se to mergne do masteru, tak se změny v databázi samy propíšou na testovací server. Jediné nutné pravidlo je, že na jednou mergnuté migrace už se nesahá.
Hello world ! Segmentation fault (core dumped)
11.5. 12:57 ZAH | skóre: 42 | blog: ZAH
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
Jsem ve stavu, kdy zatím není produkční databáze. Tabulky projektu vznikly transformací 30 let staré dos databáze do současného SQL a já se snažim z nich udělat fungující projekt.

Takže si v podstatě hraju na funguje nefunguje aktuálně se dostávám do stavu funguje podmíněně a potřebuji testovat na skutečných datech nikoliv však produkčních. Tolik k vysvětlení, jinak děkuji za tvé poznámky budou se hodit určitě.

Jestli do dostanu v dohledné době do produkčního stavu tak určitě budu v této diskuzi pokračovat.

P.S. Musím si jí najít novou klávesnici tahle si už píše co chce, tím se omlouvám za počet překlepů ještě větší než je můj standart
11.5. 13:08 dustin | skóre: 62 | blog: dustin
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
Pokud si můžeš dovolit testovat na produkčních datech (samozřejmě vhodně anonymizovaných/obfuskovaných), je to z mé zkušenosti ta nejlepší databáze pro vývoj. Samozřejmě pokud její velikost nepřesahuje pár set GB, aby se v pohodě vešla na pracovní stanici nebo lokální server (což u dosové aplikace asi nehrozí).
Josef Kufner avatar 11.5. 13:30 Josef Kufner | skóre: 69
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
V takovém případě bych ponechal staré tabulky stranou, jednou migrací vytvořil nové tabulky pomocí exportu schématu z libovolného hezkého nástroje a druhou migrací konvertoval data do nové struktury (INSERT—SELECT z těch starých tabulek ponechaných stranou). Tyto dvě migrace bych ladil a ladil, dokud bych nebyl spokojen a vedle toho bych napsal testy, které by ověřovaly funkčnost modelové vrstvy aplikace. Každé spuštění těchto migrací a testů by pak začínalo vždy s prázdnou novou databází, pokud by to tedy netrvalo půl hodiny, takže by bylo jasné, že vše funguje, jak má.

Pokud to aplikace dovolí, tak bych udělal takovýchto párů migrací víc – jeden pár pro každou oddělitelnou komponentu. To by také urychlilo opakované spouštění, neboť by se dalo vracet k nějakému snapshotu (dumpu) a nespouštět vždy vše.

Rozdělení na dvě migrace bych udělal kvůli tomu, aby se ta první se strukturou dala řešit exportem a nehrozilo, že si něco užitečného přepíšeš. Ten export struktury databáze pak můžeš celkem snadno automatizovat (pokud to za to stojí; např. dump vývojové předlohy), ale konverze dat se automatizovat moc nedá a budeš ji na konec potřebovat také – na finální přemigrování produkčních dat.

Celé se to vlastně točí kolem konceptu, že namísto přímé konverze databáze vyladíš skript, který tu konverzi provede. Výhodou je, že když pak mnohem později zjistíš, že jsi něco minul a zmigroval blbě, tak se budeš moct vrátit, migraci upravit a přemigrovat znovu. Další výhodou je, že takto zmigrovanou věc můžeš dát uživatelům k otestování a případné chyby v migraci snadno opravovat.
Hello world ! Segmentation fault (core dumped)
Řešení 1× (Filip Jirsák)
11.5. 13:59 Filip Jirsák | skóre: 67 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
Řekl bych, že sháníte Flyway nebo Liquibase. Ve VCS udržujete strukturu databáze popsanou nějakým skriptem. Oba nástroje si pak v databázi udržují aktuální verzi schématu a provedou postupně všechny aktualizační skripty až po nejnovější verzi schématu. Dá se to dělat i ručně (stačí číslovat skripty pro aktualizaci a někde si pamatovat aktuální verzi schématu), ale proč nepoužít už hotové nástroje…
11.5. 14:40 ZAH | skóre: 42 | blog: ZAH
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
Dík jak bude chvilka vyzkouším.
19.6. 10:18 =
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
To musí být člověk opravdu narcis, označit si svůj příspěvek za řešení..
14.6. 23:13 lazywriter
Rozbalit Rozbalit vše Re: Synchronizace struktur databazí v PostgreSQL
Pouzivam https://github.com/perseas/Pyrseas a docela funguje.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.