원클릭으로
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.