Skip to content

Podatkovne baze ​

Z desnim klikom na bazo v stranski vrstici odprete njene lastnosti, spremenite nabor znakov ali jo preimenujete.

Lastnosti baze ​

Lastnosti baze prikažejo ime baze, privzeti nabor znakov in kolacijo. Vsaka vrednost ima gumb Kopiraj, Kopiraj vse pa vse tri hkrati postavi v odložišče:

text
Name: shop
Character set: utf8mb4
Collation: utf8mb4_unicode_ci

Pomen obeh vrednosti je odvisen od pogona:

PogonNabor znakovKolacija
MySQL / MariaDBPrivzeti nabor znakov bazePrivzeta kolacija
PostgreSQLKodiranje (npr. UTF8)datcollate, jezikovna nastavitev, po kateri se razvrščajo nizi
SQL ServerKodna stran kolacije (npr. CP1250, UTF-8 (CP65001))Kolacija baze
SQLitePRAGMA encodingBINARY

Sprememba nabora znakov in kolacije ​

Na MySQL in MariaDB ima okno lastnosti možnost Spremeni nabor znakov…. Izberite nabor znakov — kolacija se preklopi na privzeto za ta nabor, izberete pa lahko tudi drugo.

Ko je označeno Uporabi tudi za vse tabele in polja v bazi (privzeto), se sprememba ne ustavi pri privzeti vrednosti baze. Okno prešteje tabele in besedilna polja ter pokaže, koliko tabel je dejansko treba pretvoriti; tabele, ki že uporabljajo izbrano kolacijo, se preskočijo.

Uporabi zahteva potrditev, nato:

  1. spremeni privzeto vrednost baze (ALTER DATABASE … CHARACTER SET … COLLATE …), tako da tabele, ustvarjene od zdaj naprej, dobijo nov nabor;
  2. pretvori tabele eno za drugo z ALTER TABLE … CONVERT TO CHARACTER SET …, kar spremeni privzeto vrednost tabele in vsak stolpec CHAR, VARCHAR, TEXT, ENUM in SET.

Vrstica napredka kaže, katera tabela se pretvarja. Ustavi konča postopek po trenutni tabeli. Tabela, ki ne uspe, ne ustavi drugih; vse napake so na koncu navedene z imenom tabele.

Tuji ključi na besedilnih stolpcih niso ovira: vsaka pretvorba teče z izklopljenim preverjanjem tujih ključev, tako da se podrejena tabela lahko spremeni pred nadrejeno. Ključi ostanejo na mestu in se uveljavljajo kot prej.

Vsaka tabela se zgradi znova

CONVERT TO prepiše tabelo in jo ves čas zaklene, kar pri veliki tabeli traja. Prehod na večbajtni nabor, kot je utf8mb4, lahko stolpec TEXT spremeni tudi v MEDIUMTEXT, da ohrani zmogljivost. Najprej naredite varnostno kopijo.

Pogledi nimajo lastnih stolpcev in se ne pretvarjajo. Shranjene procedure in funkcije ohranijo kolacijo, s katero so bile ustvarjene; ustvarite jih znova, če morajo uporabljati novo.

PostgreSQL, SQL Server in SQLite vrednosti prikažejo samo za branje: nobeden od njih tega pri obstoječi bazi ne more varno spremeniti.

Preimenovanje baze ​

Preimenuj bazo… je v meniju desnega klika baze za MySQL, MariaDB, PostgreSQL in SQL Server. Baza SQLite je datoteka — preimenujete jo z urejanjem povezave.

PostgreSQL in SQL Server ​

Oba preimenujeta z enim stavkom (ALTER DATABASE … RENAME TO in ALTER DATABASE … MODIFY NAME). Tabele, drugi objekti in dovoljenja ostanejo, kjer so.

Strežnik za to potrebuje izključen dostop do baze. Okno pokaže, koliko drugih sej jo uporablja, Prekini druge seje pa jih najprej prekine — njihove odprte transakcije se razveljavijo. NabuSQL samodejno zapre svoje povezave z bazo.

Na SQL Serverju fizične datoteke (.mdf, .ldf) ohranijo svoja imena.

MySQL in MariaDB ​

MySQL in MariaDB za to nimata stavka, zato NabuSQL bazo zgradi znova pod novim imenom. Okno razloži korake, navede vsebino baze, gumb Preimenuj pa ostane onemogočen, dokler ne označite Razumem tveganje in imam varnostno kopijo baze.

Kaj se zgodi:

  1. Vsaka definicija, ki je ni mogoče premakniti — prožilci, pogledi, procedure, funkcije, dogodki, dovoljenja — se najprej prebere in shrani v nabusql_rename_<database>_<time>.sql v mapi Prenosi. Če katere od njih ni mogoče prebrati, se nič ne spremeni.
  2. Nova baza se ustvari z enakim naborom znakov in kolacijo.
  3. Prožilci se izbrišejo (MySQL ne premakne tabele, ki ga ima), nato se vse tabele premaknejo z enim samim RENAME TABLE. To je hitro — spremenijo se samo metapodatki, nobena vrstica se ne kopira. Zaporedja MariaDB in sistemsko verzionirane tabele se premaknejo enako, slednje s svojo zgodovino. Privzete vrednosti stolpcev, ki jemljejo iz zaporedja (DEFAULT NEXTVAL(…)), se nato preusmerijo na premaknjeno zaporedje: MariaDB jih zapiše s starim imenom baze, zato bi se pokvarile takoj, ko bi bila ta baza izbrisana.
  4. Procedure in funkcije, pogledi, prožilci in dogodki se ustvarijo znova v novi bazi. Sklici, zapisani kot `old`.table, se preusmerijo na novo ime. Prožilci ohranijo vrstni red proženja in sql_mode, s katerim so bili ustvarjeni.
  5. Dovoljenja uporabnikov za bazo, njene tabele in rutine se kopirajo na novo ime.
  6. Samo če so vsi koraki uspeli, se stara dovoljenja odvzamejo in stara, zdaj prazna baza izbriše.

Če 3. korak ne uspe, se razveljavi: prožilci se ustvarijo znova, nova baza pa se odstrani. Če kaj ne uspe po premiku tabel, se stara baza obdrži z vsem, česar ni bilo mogoče ustvariti znova, rezultat pa navede vsak korak in njegovo stanje.

Ni atomarno in nič zunaj te baze se ne spremeni

Pogledi, rutine in prožilci v drugih bazah ter aplikacije, ki se povezujejo s starim imenom, še naprej uporabljajo staro ime. Med preimenovanjem z bazo ne sme delati nihče drug.

Kadar račun DEFINER ne obstaja ali nimate dovoljenja za njegovo uporabo, se objekt ustvari z vami kot DEFINER-jem, rezultat pa to navede.

Kaj NabuSQL posodobi namesto vas ​

Po vsakem preimenovanju NabuSQL svoje sklice preusmeri na novo ime: shranjene poizvedbe, odprte zavihke, opravila razporejevalnika, privzeto bazo povezave in mapo shranjenih poizvedb na disku.