SQL

Wat is een SQL-bestand?

Een tabel omgezet in INSERT-opdrachten, klaar om in een database te laden.

Wat SQL is

SQL is een puur tekstformaat dat in elke editor opengaat. Het wordt gebruikt voor gegevens tussen programma’s verplaatsen en archivering.

De extensie is .sql en de volledige naam SQL Insert Statements. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.

Waar SQL vandaan komt

Het gaat terug tot 1986. De specificatie is ISO/IEC 9075.

Aan een formaat dat zo lang leesbaar is gebleven kun je iets toevertrouwen dat je over tien jaar terug wilt hebben.

De specificatie is openbaar

Ze is volledig gepubliceerd, dus wie het formaat wil uitvoeren kan dat uit het document doen in plaats van door te kijken hoe anderen het doen. Daarom duikt het in zo veel programma’s op, en daarom gaan bestanden van twintig jaar geleden nog steeds open. Openbaar is niet hetzelfde als royaltyvrij: waar een formaat een codec omhult, is de octrooilicentie een aparte vraag waarop de standaard geen antwoord geeft.

Je kunt er aantekeningen in kwijt

SQL heeft een commentaarsyntaxis — dat is het verschil tussen een bestand dat een mens onderhoudt en een bestand dat een programma schrijft. Bij het converteren naar een formaat zonder commentaar zijn ze het eerste wat verdwijnt, en er wordt niet gewaarschuwd.

Wat SQL opent

PostgreSQL, MySQL en DBeaver lezen het, en de meeste programma’s van dezelfde soort ook.

Als een bestand niet opengaat ligt het zelden aan het formaat — vaker is het programma ouder dan het formaat. Converteren naar iets ouders is de betrouwbare weg eromheen, en daarvoor is de rest van deze site bedoeld.

Het in de browser openen

Geen enkele browser leest het.

Dat is veruit de meest voorkomende reden om het te converteren: niet dat het formaat slecht is, maar dat de plek waar je het bestand wilt tonen het niet kan lezen.

Het is een werkformaat

SQL is bedoeld om te openen en te wijzigen. Houd het bestand in dit formaat zolang het werk loopt, en exporteer eruit wanneer er een afgeronde versie nodig is.

Een taal, en een bestand dat toevallig zo heet

SQL is een querytaal, gestandaardiseerd sinds 1986. Een .sql-bestand is een tekstbestand met statements erin, en dat is het hele formaat — geen header, geen structuur, geen manier om aan de extensie te zien wat een bestand precies doet.

In de praktijk vallen de bestanden die mensen uitwisselen in twee groepen. Een dump is een database of tabel weggeschreven als statements die hem elders herstellen. Een migratie is een script dat een schema gecontroleerd verandert. Beide zijn tekst, beide openen in elke editor.

Wat een dump echt bevat

Meestal drie dingen op volgorde. Een statement dat de tabel verwijdert als hij bestaat, waarom een dump tegen een levende database draaien geen omkeerbare handeling is. Een CREATE TABLE-statement dat de kolommen en typen definieert. Dan de rijen, als INSERT-statements.

Eromheen voegt een echte dump huishouding toe: tekensetverklaringen, instellingen die indexherbouw opschorten tijdens het laden, en een transactiewrapper. Die huishouding is databasespecifiek, en de belangrijkste reden dat een dump van de ene database niet in de andere laadt.

De dialecten zijn het probleem

De standaard specificeert een kern, en elke database breidt uit. Identifier-quoting verschilt — backticks in MySQL, dubbele aanhalingstekens in PostgreSQL, vierkante haken in SQL Server. Automatisch oplopende sleutels worden op drie manieren geschreven.

Een MySQL-dump laadt dus niet in PostgreSQL, en de foutmelding gaat meestal over syntaxis op regel vier zonder uit te leggen waarom. Ga je data verplaatsen in plaats van een schema, dan is via CSV vaak sneller en betrouwbaarder dan het SQL vertalen.

Er eentje laden zonder grafische tool

Op de opdrachtregel heeft elke database zijn eigen client: psql voor PostgreSQL, de mysql-client voor MySQL en MariaDB, sqlite3 voor SQLite. Dit is verreweg de snelste route voor een grote dump.

Twee dingen om vooraf te doen. Lees de bovenkant van het bestand om te zien of iets verwijderd wordt. En maak de doeldatabase eerst aan als de dump dat zelf niet doet.

Waarom een grote import halverwege stopt

Meestal een van vier. Een limiet op pakket- of statementgrootte, geraakt door een gebundelde INSERT met duizenden rijen. Een timeout in een grafische client zonder equivalent op de opdrachtregel. Een tekensetmismatch, die als verhaspelde tekst verschijnt in plaats van een fout.

Of een foreign-key-beperking die rijen weigert die aankomen voordat de tabel waarnaar ze verwijzen bestaat. Dumps schakelen normaal beperkingscontrole uit rond het laden, en een handmatig bewerkt extract verliest die bescherming.

Wanneer een dump het verkeerde formaat is

Een dump is voor het herstellen van een database. Wil je de data — analyseren, in een rekenblad laden, aan iemand zonder database geven — dan is CSV de betere container, en Parquet nog beter voor iets groots.

Andersom is ook nuttig om te weten. Een rekenblad omzetten naar INSERT-statements is de standaardmanier om een tabel in een database te krijgen zonder directe verbinding — een gangbare situatie bij beheerde hosting.

Er eentje veilig lezen en bewerken

Het is tekst, dus elke editor opent het. Een editor die SQL-syntaxis begrijpt is de moeite waard voor alles wat je van plan bent uit te voeren.

Een dump kan zeer groot zijn, en de verstandige manier om er eentje te inspecteren is de eerste en laatste paar tientallen regels bekijken in plaats van het geheel te openen. De laatste regels vertellen of de dump voltooid is.

De gegevens, op één plek

Kenmerken en herkomst van het formaat SQL.
Extensie.sql
Mediatypeapplication/sql
Voor het eerst gepubliceerd1986
SpecificatieISO/IEC 9075