Clonarea bazei de date

Clonarea bazei de date

În dezvoltarea unui sistem ERP este necesar un mediu de testare. Acesta poate fi construit de la zero, însă adesea sunt necesare date de test realiste. Dacă există un sistem de producție, baza sa de date poate fi clonată selectiv. Acest document descrie procedura istorică de clonare a unei baze PostgreSQL dintr-un mediu de producție.

Procedura presupune mai mulți pași, deoarece instrumentele prezentate nu realizează întregul proces automat. Sunt utilizate:

  • DBeaver, pentru exportul datelor;
  • pgAdmin, pentru exportul structurii bazei de date.

Probleme cunoscute

La exportul unor tabele selectate în DBeaver, unele tabele sau date pot lipsi chiar dacă au fost bifate. În acest caz se poate exporta întreaga schemă sau se poate verifica fișierul de configurare:

C:\Users\<user_name>\AppData\Roaming\DBeaverData\workspace6\General\.dbeaver\tasks.json

Verificați dacă selecția poate fi configurată manual. Dacă nu, poate fi necesar exportul întregii scheme și eliminarea manuală a datelor care nu sunt necesare.

Soluție temporară 1

Debifați toate schemele și tabelele, apoi selectați manual elementele dorite. În versiunea DBeaver descrisă, debifarea unui singur tabel poate elimina în fundal selecția tuturor tabelelor din schema respectivă.

Soluție temporară 2 — mai sigură

Creați și salvați un proiect. Adăugați manual schemele și tabelele în fișierul de configurare menționat și păstrați o copie de siguranță. Astfel, configurația exportului poate fi reutilizată.

1.1     Exportarea structurii bazei de date

Baza sursă trebuie să aibă structura actualizată. Ghidul utilizează comanda update-database în Package Manager Console pentru fiecare plug-in.

Structura este exportată cu pgAdmin. Instrumentul de migrare EF nu este utilizat direct în această etapă, deoarece ar crea și cheile externe înainte de importarea datelor.

Deschideți pgAdmin, selectați baza sursă, apoi utilizați clic dreapta → Backup… sau meniul Tools → Backup. Alegeți fișierul în Filename și formatul Custom.

  • Selectați fișierul în care se salvează exportul.

În fila Data/Objects, selectați Only schema în secțiunea Type of objects. În secțiunea Do not save, selectați Owner și Privilege.

  • Exportați numai structura bazei de date.

În fila Options, păstrați configurația existentă sau adaptați opțiunile pentru exportul structurii:

  • Opțiunile exportului de schemă.

Apăsați Backup, așteptați finalizarea exportului, apoi închideți pgAdmin.

1.2     Exportarea datelor

Pentru a exporta numai datele necesare, deschideți DBeaver și selectați baza sursă. Folosiți clic dreapta → Tools → Backup sau meniul Database → Tools → Backup. Formularul permite selectarea schemelor și tabelelor dorite.

În fila următoare, alegeți formatul Plain, instrucțiuni INSERT în loc de COPY și excludeți proprietarul obiectelor. Stabiliți folderul de ieșire și modelul numelui fișierului, apoi apăsați Proceed.

1.2.1     Salvarea configurației de export

Configurarea selecției poate dura. Folosiți Save Task pe parcurs și la final. DBeaver salvează configurația într-un Database Task, accesibil în partea de jos a ecranului și editabil ulterior. Configurația se găsește în:

C:\Users\<user_name>\AppData\Roaming\DBeaverData\workspace6\General\.dbeaver\tasks.json

Păstrați o copie de siguranță a acestui fișier!

Puteți salva și întregul Project, care include configurația sarcinii, prin File → Export → DBeaver → Project.

  • Selectați schemele și tabelele din Database → Tools → Backup.
  • Opțiuni pentru date: SQL simplu, fără compresie, proprietari sau privilegii.

1.3     Editarea fișierelor exportate

Exportul datelor include instrucțiuni SQL pentru crearea schemelor și tabelelor, inserarea datelor și configurarea cheilor externe și a altor dependențe. Structura exportată de DBeaver include doar elementele selectate. Importarea directă nu ar crea tabelele omise, iar folosirea update-database înaintea datelor ar activa restricțiile de dependență prea devreme.

Fișierul final pentru import are următoarea structură:

  • Prima parte a exportului pgAdmin, în principal instrucțiunile CREATE SCHEMA și CREATE TABLE;
  • Instrucțiunea BEGIN TRANSACTION;
  • Partea din mijloc a exportului DBeaver, cu instrucțiunile INSERT INTO;
  • Instrucțiunea COMMIT;
  • Ultima parte a exportului pgAdmin, în principal ALTER TABLE și CREATE INDEX.
  • Înlocuiți secțiunile de structură din fișierul de date cu cele din exportul complet al schemei.

1.3.1     Crearea schemelor și tabelelor

Deschideți exportul structurii. Mutați într-un fișier separat prima parte, până la instrucțiunea CREATE TABLE public.”__EFMigrationsHistory”, inclusiv aceasta. Păstrați restul fișierului: acesta creează dependențele după importarea datelor.

1.3.2     Editarea fișierului de date

În fișierul de date, eliminați conținutul de la început până înaintea primei instrucțiuni INSERT INTO. Inserările trebuie executate într-o tranzacție. Adăugați înaintea lor:

BEGIN TRANSACTION;

Înainte de BEGIN TRANSACTION; introduceți prima parte a fișierului de structură pregătit anterior. Astfel, toate schemele și tabelele sunt create înaintea datelor.

Identificați ultima instrucțiune INSERT INTO completă, de obicei pentru public.”__EFMigrationsHistory”. Eliminați conținutul ulterior care creează cheile externe. După inserări, încheiați tranzacția cu COMMIT; și adăugați restul fișierului original de structură, care creează dependențele dintre obiecte.

1.4     Importarea într-o bază nouă

1.4.1     Crearea unei baze de date noi

Creați mai întâi o bază de date goală, utilizând unul dintre instrumentele prezentate sau linia de comandă.

1.4.2     Executarea scriptului SQL

Selectați baza nouă în DBeaver, apoi accesați Database → Tools → Execute Script. Selectați fișierul SQL pregătit și apăsați Start.

După executarea cu succes, baza clonată este disponibilă.

Scriptul SQL poate fi executat și cu pgAdmin sau un alt instrument potrivit.