Aller au contenuAller à la navigationAller au contact

Applications

Tables

Nos bases de données, dans une app Mac.

Tables est un client de bases de données pour le Mac : MySQL, MariaDB, PostgreSQL, SQLite et Redis, en local ou à travers un tunnel SSH, avec un éditeur SQL qui connaît le schéma.

Une fenêtre par connexion, des onglets, et des favoris rangés par groupe, avec une couleur et une étiquette : Local, Dev, Test, Staging ou Prod. Les connexions d’autres clients s’importent depuis les réglages.

Une application macOS native en Swift 6 et SwiftUI, signée et notarisée, en français et en anglais. Elle parle directement aux serveurs, sans pilote à installer.

Pour
Développeurs
Plateformes
  • macOS
Technologies
  • Swift
  • SwiftUI
  • SwiftNIO
  • AppKit

Une connexion, et on est dans les données.

Le contenu d’une table dans Tables

Parcourir et modifier

Une table s’ouvre par pages de 500 lignes, avec son total. On filtre sur plusieurs conditions, en ET ou en OU, on trie sur plusieurs colonnes, et l’ordre et la largeur des colonnes sont retenus par table. Une clé étrangère se suit d’un clic.

Le détail d’une ligne affiche une valeur en texte, en JSON, en image ou en hexadécimal. Les modifications s’annulent et se rétablissent, s’affichent en SQL à la demande, puis s’enregistrent dans une transaction.

Une table, filtrée et triée, avec le détail d’une ligne

Un éditeur qui connaît le schéma

L’éditeur SQL colore, formate et complète à partir des tables et des colonnes de la base. Chaque instruction a son résultat, les paramètres sont demandés à l’exécution, et le plan d’exécution d’une instruction s’affiche à la demande.

Une requête trop longue s’annule par une seconde connexion, qui demande au serveur de l’arrêter. Un résultat tiré d’une seule table reste modifiable comme la table elle-même. L’historique et les requêtes enregistrées sont propres à chaque favori.

L’éditeur SQL, avec l’autocomplétion et plusieurs résultats

Prudent avec la production

Une connexion en lecture seule l’est trois fois : l’interface désactive les modifications, chaque instruction est analysée avant de partir, et la session elle-même passe en lecture seule sur le serveur. Pour Redis, Tables demande au serveur quelles commandes écrivent.

Une connexion étiquetée Prod demande, par défaut, confirmation avant les écritures de l’éditeur. Les tunnels SSH passent par l’OpenSSH du Mac et vérifient la clé du serveur, et les mots de passe restent dans le trousseau, synchronisé par iCloud.

Tables/Model/SQLDialect.swift · QueryEditor.swift
var readOnlyGuard: String {
    switch self {
    case .mysql: "SET SESSION TRANSACTION READ ONLY"
    case .postgresql: "SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY"
    case .sqlite: "PRAGMA query_only = ON"
    }
}

if isReadOnly {
    _ = try? await session.execute(session.dialect.readOnlyGuard)
}

for statement in statements {
    let started = clock.now

    do {
        guard !isReadOnly || SQLStatements.isReadOnly(statement, dialect: session.dialect) else {
            throw DatabaseError(message: String(localized: "Connexion en lecture seule"))
        }
        let result = try await session.execute(statement)
Une connexion par tunnel SSH, étiquetée Prod
La confirmation avant une écriture

Écrit depuis zéro

Tables est en Swift de bout en bout. MySQL, MariaDB et PostgreSQL passent par des pilotes open source, corrigés pour remonter ce dont l’édition a besoin, comme la table d’origine de chaque colonne. Le protocole de Redis et l’export Excel, archive ZIP comprise, sont écrits à la main.

La structure se modifie aussi : colonnes, index, clés étrangères, déclencheurs, vues et fonctions. Pour SQLite, une modification que la base ne sait pas faire reconstruit la table. Processus, utilisateurs et privilèges, variables : l’administration courante tient dans la même fenêtre.

La structure d’une table
Les clés d’une base Redis

Avec Alpage

Tables fait la paire avec Alpage, notre environnement de développement local. Les sauvegardes utilisent d’abord ses outils mysqldump et pg_dump, et les tests d’intégration tournent contre ses vrais serveurs MySQL, MariaDB, PostgreSQL et Redis.

Un client natif, pour cinq moteurs.

Moteurs de bases de données
5
Moteurs de bases de données
Barrières en lecture seule
3
Barrières en lecture seule
Tests automatisés
960+
Tests automatisés
Télémétrie
0
Télémétrie

Un projet dans la même veine ?Ou le projet que vous n’osez pas lancer.

Un gros projet se mène comme un petit : une étape à la fois. La première, c’est un café à Vevey ou un appel.

Parlons-en