ワンクリックで
sklein-sql-generation
Génération de SQL pour PostgreSQL selon le style "river" et les conventions de Stéphane Klein.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Génération de SQL pour PostgreSQL selon le style "river" et les conventions de Stéphane Klein.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Créer un nouveau projet Node.js avec PostgreSQL (raw SQL, migrations, conteneur Podman) basé sur les préférences de Stéphane Klein. Use when user wants to create a Node.js project with PostgreSQL, migrations, or raw SQL.
Initialize ADR/agents/docs infrastructure in a project
Génère le template (template/), le script generate.sh, le vars-example.yaml, et le SKILL.md d'un projet à partir d'un projet source existant. Use when user wants to create a project scaffolding template from an existing project.
Conventions HTTP API de Stéphane Klein — nommage, verbes, codes, pagination, erreurs, versioning, HATEOAS, filtres, embedding, upload, OpenAPI. Utiliser lors de la création, modification ou review d'une API HTTP.
Gère la todo list de Stéphane via la banque mémoire hindsight `todo` et le sous-agent `@todo`. Use when user says: ajoute à ma todo, marque comme fait, liste mes tâches, supprime une tâche, bloque/débloque une tâche, quelles sont mes priorités, importe ça dans ma todo, ou colle un bloc de texte contenant plusieurs tâches.
Guide pour la création de nouveaux skills
| name | sklein-sql-generation |
| description | Génération de SQL pour PostgreSQL selon le style "river" et les conventions de Stéphane Klein. |
Génération de SQL pour PostgreSQL selon le style "river" et les conventions de Stéphane Klein.
Ce skill est activé lorsque l'utilisateur demande de :
users, orders, invoice_itemsstaff)Alignement des mots-clés SQL à droite, valeurs à gauche, créant une "rivière" verticale (cf. White space - SQL Style Guide).
SELECT u.id,
u.first_name,
u.created_at
FROM users AS u
WHERE u.email = 'test@example.com';
SELECT, FROM, WHERE, AND, JOIN) alignés à droite=, après virgulesAS pour les alias| Élément | Convention | Exemple |
|---|---|---|
| Table | pluriel, snake_case | users, invoice_items |
| Colonne | singulier, snake_case | email, created_at |
| Clé primaire | {table_singular}_id | user_id |
| Clé étrangère | {referenced_table_singular}_id | order_id |
| Index | idx_{table}_{column(s)} | idx_users_email |
| Contrainte FK | fk_{table}_{referenced_table} | fk_orders_users |
| Contrainte UNIQUE | uq_{table}_{column} | uq_users_email |
| Contrainte CHECK | chk_{table}_{description} | chk_users_age_positive |
Ne pas utiliser de préfixes (tbl_, sp_, etc.).
RETURNING pour les INSERT/UPDATE/DELETE afin de récupérer les données modifiées.ON CONFLICT ... DO UPDATE pour les opérations upsert.WITH) pour les requêtes complexes.YYYY-MM-DDTHH:MM:SS.SSSSS+00.Toujours UPPERCASE pour les mots-clés SQL (SELECT, WHERE, JOIN, etc.).
Ne jamais exposer la PK interne dans les URLs, APIs ou interfaces utilisateur. Utiliser à la place un identifiant public dédié (slug sémantique ou NanoID).
INTEGER ou BIGINT avec séquencePar défaut, utiliser INTEGER GENERATED ALWAYS AS IDENTITY (ou BIGINT si la table est susceptible de dépasser ~2 milliards de lignes).
CREATE TABLE users (
user_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nanoid VARCHAR(6) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
Raisons : les indexes B-Tree sur des valeurs séquentielles sont ~300× plus efficaces que sur UUID v4 (insertions en feuille droite, pas de page splits, taux de remplissage ~98% vs ~79%, WAL réduit).
Par ordre de préférence :
/users/stephane-klein/ — meilleur pour l'UX et le SEO.VARCHAR(6) alphanumérique lowercase quand il faut un identifiant court non-devinable.pg_uuidv7.-- Exemple avec NanoID comme identifiant public
ALTER TABLE users ADD COLUMN nanoid VARCHAR(6) NOT NULL UNIQUE;
CREATE INDEX idx_users_nanoid ON users (nanoid);
BIGINT, dégradation du buffer cache.Dans une architecture multi-bases ou avec génération d'IDs côté client (offline-first, microservices sans coordination), UUID v7 comme PK est légitime. Les jointures internes restent inefficaces comparées à BIGINT, mais le besoin fonctionnel prime.
INTEGER GENERATED ALWAYS AS IDENTITY comme PK et suggérer un champ nanoid ou slug si la table est destinée à être exposée.