Skip to content

Baze podataka

Desni klik na bazu u bočnoj traci daje njezina svojstva, promjenu character seta i preimenovanje.

Svojstva baze

Svojstva baze prikazuju naziv baze, zadani character set i collation. Uz svaku vrijednost je gumb Kopiraj, a Kopiraj sve stavlja sve tri u međuspremnik odjednom:

text
Naziv: shop
Character set: utf8mb4
Collation: utf8mb4_unicode_ci

Što te dvije vrijednosti znače ovisi o vrsti baze:

BazaCharacter setCollation
MySQL / MariaDBZadani character set bazeZadani collation
PostgreSQLEncoding (npr. UTF8)datcollate, lokalizacija po kojoj se tekst sortira
SQL ServerKodna stranica collationa (npr. CP1250, UTF-8 (CP65001))Collation baze
SQLitePRAGMA encodingBINARY

Promjena character seta i collationa

Na MySQL-u i MariaDB-u prozor svojstava ima Promijeni character set…. Odaberite character set — collation se prebaci na zadani za taj set, a možete odabrati i drugi.

Uz uključeno Primijeni i na sve tablice i polja u bazi (zadano) promjena ne staje na zadanoj vrijednosti baze. Prozor broji tablice i tekstualna polja i pokazuje koliko tablica stvarno treba konverziju; tablice koje već imaju odabrani collation preskaču se.

Primijeni traži potvrdu, a zatim:

  1. mijenja zadane postavke baze (ALTER DATABASE … CHARACTER SET … COLLATE …), pa tablice kreirane od sada dobivaju novi set;
  2. konvertira tablice jednu po jednu s ALTER TABLE … CONVERT TO CHARACTER SET …, što mijenja zadani set tablice i svaki stupac tipa CHAR, VARCHAR, TEXT, ENUM i SET.

Traka napretka pokazuje koja se tablica trenutno konvertira. Zaustavi prekida nakon tablice koja je u tijeku. Tablica koja ne uspije ne zaustavlja ostale; na kraju je svaka greška ispisana s nazivom tablice.

Strani ključevi na tekstualnim stupcima ne smetaju: svaka konverzija radi s isključenom provjerom stranih ključeva, pa se tablica-dijete može promijeniti prije roditelja. Ključevi ostaju na mjestu i provode se kao i prije.

Svaka se tablica ponovno gradi

CONVERT TO prepisuje tablicu i drži je zaključanom dok traje, što na velikoj tablici potraje. Prelazak na višebajtni set kao što je utf8mb4 može i pretvoriti TEXT stupac u MEDIUMTEXT da zadrži kapacitet. Prije toga napravite sigurnosnu kopiju.

Pogledi nemaju vlastite stupce i ne konvertiraju se. Procedure i funkcije zadržavaju collation s kojim su kreirane; ako moraju koristiti novi, kreirajte ih ponovno.

PostgreSQL, SQL Server i SQLite prikazuju vrijednosti samo za čitanje: nijedan od njih to ne može sigurno promijeniti na postojećoj bazi.

Preimenovanje baze

Preimenuj bazu… nalazi se u izborniku desnog klika na bazu za MySQL, MariaDB, PostgreSQL i SQL Server. SQLite baza je datoteka — preimenujte je kroz uređivanje konekcije.

PostgreSQL i SQL Server

Oba preimenuju jednom naredbom (ALTER DATABASE … RENAME TO i ALTER DATABASE … MODIFY NAME). Tablice, ostali objekti i prava ostaju gdje jesu.

Server za to traži bazu samo za sebe. Prozor pokazuje koliko drugih veza je koristi, a Prekini ostale veze ih najprije izbacuje — njihove nedovršene transakcije se poništavaju. Vlastite veze prema bazi NabuSQL zatvara sam.

Na SQL Serveru fizičke datoteke (.mdf, .ldf) zadržavaju stara imena.

MySQL i MariaDB

MySQL i MariaDB nemaju naredbu za to, pa NabuSQL gradi bazu pod novim imenom. Prozor objašnjava korake i navodi što baza sadrži, a gumb Preimenuj ostaje neaktivan dok ne označite Razumijem rizik i imam backup baze.

Što se događa:

  1. Sve definicije koje se ne mogu premjestiti — okidači, pogledi, procedure, funkcije, eventi, prava — najprije se pročitaju i spreme u nabusql_rename_<baza>_<vrijeme>.sql u mapi Downloads. Ako se ijedna ne može pročitati, ništa se ne mijenja.
  2. Kreira se nova baza s istim character setom i collationom.
  3. Okidači se brišu (MySQL ne premješta tablicu koja ga ima), a zatim se sve tablice premjeste jednom naredbom RENAME TABLE. To je brzo — mijenjaju se samo metapodaci, redci se ne kopiraju.
  4. Procedure i funkcije, pogledi, okidači i eventi ponovno se kreiraju u novoj bazi. Reference napisane kao `stara`.tablica preusmjeravaju se na novo ime. Okidači zadržavaju redoslijed okidanja i sql_mode s kojim su kreirani.
  5. Prava korisnika na bazu, njezine tablice i rutine kopiraju se na novo ime.
  6. Tek ako su svi koraci uspjeli, stara se prava ukidaju i briše se stara, tada već prazna baza.

Ako korak 3 ne uspije, vraća se: okidači se ponovno kreiraju, a nova baza briše. Ako nešto ne uspije nakon što su tablice premještene, stara baza se zadržava s onim što se nije moglo ponovno kreirati, a rezultat navodi svaki korak s njegovim statusom.

Nije atomarno i ništa izvan ove baze se ne mijenja

Pogledi, rutine i okidači u drugim bazama te aplikacije koje se spajaju na staro ime i dalje koriste staro ime. Dok traje preimenovanje, nitko drugi ne bi smio raditi s bazom.

Kad račun iz DEFINER-a ne postoji ili nemate pravo da ga koristite, objekt se kreira s vama kao vlasnikom, i rezultat to navodi.

Što NabuSQL ažurira umjesto vas

Nakon svakog preimenovanja NabuSQL svoje reference prebacuje na novo ime: spremljene upite, otvorene kartice, zadatke u Task Scheduleru, zadanu bazu konekcije i mapu sa spremljenim upitima na disku.