📋 Database Schema Extraction Guide

Learn how to extract your database schema for Text2SQL

📑 Table of Contents

🐎MySQL / MariaDB

Extract your MySQL or MariaDB database schema using these queries:

Method 1: Using SHOW CREATE TABLE (Recommended)

This method gives you the exact CREATE TABLE statements:

-- Get all table names first
SHOW TABLES;

-- Then for each table, run:
SHOW CREATE TABLE your_table_name;

Method 2: Using INFORMATION_SCHEMA

Get a formatted schema for all tables at once:

SELECT 
    CONCAT('CREATE TABLE ', TABLE_NAME, ' (\n',
           GROUP_CONCAT(
               CONCAT('    ', COLUMN_NAME, ' ', COLUMN_TYPE,
                      IF(IS_NULLABLE = 'NO', ' NOT NULL', ''),
                      IF(COLUMN_KEY = 'PRI', ' PRIMARY KEY', ''),
                      IF(EXTRA != '', CONCAT(' ', EXTRA), ''))
               SEPARATOR ',\n'
           ),
           '\n);') AS create_statement
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name'
GROUP BY TABLE_NAME;
ðŸ’Ą Tip: Replace 'your_database_name' with your actual database name. You can find it by running: SELECT DATABASE();

🐘PostgreSQL

Extract your PostgreSQL database schema:

Method 1: Using pg_dump (Command Line)

pg_dump -U username -d database_name --schema-only > schema.sql

Method 2: Using SQL Queries

SELECT 
    'CREATE TABLE ' || table_name || ' (' || 
    string_agg(
        column_name || ' ' || data_type || 
        CASE WHEN character_maximum_length IS NOT NULL 
             THEN '(' || character_maximum_length || ')' 
             ELSE '' END ||
        CASE WHEN is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END,
        ', '
    ) || ');' AS create_statement
FROM information_schema.columns
WHERE table_schema = 'public'
GROUP BY table_name;
ðŸ’Ą Tip: Change 'public' to your schema name if different.

🗄ïļSQL Server

Extract your SQL Server database schema:

Using INFORMATION_SCHEMA

SELECT 
    'CREATE TABLE ' + TABLE_NAME + ' (' + CHAR(13) +
    STUFF((
        SELECT ',' + CHAR(13) + '    ' + 
               COLUMN_NAME + ' ' + 
               DATA_TYPE + 
               CASE WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL 
                    THEN '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' 
                    ELSE '' END +
               CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END
        FROM INFORMATION_SCHEMA.COLUMNS c2
        WHERE c2.TABLE_NAME = c1.TABLE_NAME
        FOR XML PATH('')
    ), 1, 1, '') + CHAR(13) + ');' AS CreateStatement
FROM INFORMATION_SCHEMA.COLUMNS c1
GROUP BY TABLE_NAME;

Using sp_help

-- For each table:
sp_help 'your_table_name';

ðŸŠķSQLite

Extract your SQLite database schema:

Method 1: Using .schema command (SQLite CLI)

-- In SQLite command line:
.schema

-- Or for a specific table:
.schema your_table_name

Method 2: Using SQL Query

SELECT sql FROM sqlite_master 
WHERE type='table' 
AND name NOT LIKE 'sqlite_%';
ðŸ’Ą Tip: SQLite stores the exact CREATE TABLE statements, making schema extraction very simple!

ðŸ”īOracle

Extract your Oracle database schema:

Using DBMS_METADATA

-- For a specific table:
SELECT DBMS_METADATA.GET_DDL('TABLE', 'YOUR_TABLE_NAME') 
FROM DUAL;

-- For all tables in your schema:
SELECT DBMS_METADATA.GET_DDL('TABLE', table_name) 
FROM user_tables;

Using USER_TAB_COLUMNS

SELECT 
    'CREATE TABLE ' || table_name || ' (' ||
    LISTAGG(
        column_name || ' ' || data_type ||
        CASE WHEN data_length IS NOT NULL 
             THEN '(' || data_length || ')' 
             ELSE '' END ||
        CASE WHEN nullable = 'N' THEN ' NOT NULL' ELSE '' END,
        ', '
    ) WITHIN GROUP (ORDER BY column_id) || ');' AS create_statement
FROM user_tab_columns
GROUP BY table_name;

❄ïļSnowflake

Extract your Snowflake database schema:

Method 1: Using GET_DDL Function

Get the DDL for a specific table:

-- For a specific table:
SELECT GET_DDL('TABLE', 'DATABASE_NAME.SCHEMA_NAME.TABLE_NAME');

Method 2: Using INFORMATION_SCHEMA

Get schema information for all tables in a database:

-- Get all tables in current database and schema
SELECT 
    'CREATE TABLE ' || TABLE_NAME || ' (' ||
    LISTAGG(
        COLUMN_NAME || ' ' || DATA_TYPE ||
        CASE WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL 
             THEN '(' || CHARACTER_MAXIMUM_LENGTH || ')' 
             ELSE '' END ||
        CASE WHEN NUMERIC_PRECISION IS NOT NULL 
             THEN '(' || NUMERIC_PRECISION || 
                  CASE WHEN NUMERIC_SCALE IS NOT NULL 
                       THEN ',' || NUMERIC_SCALE 
                       ELSE '' END || ')' 
             ELSE '' END ||
        CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END,
        ', '
    ) WITHIN GROUP (ORDER BY ORDINAL_POSITION) || ');' AS create_statement
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'YOUR_SCHEMA_NAME'
GROUP BY TABLE_NAME;

Method 3: Get All Tables with GET_DDL

Loop through all tables and get their DDL:

-- First, get list of all tables
SHOW TABLES IN SCHEMA YOUR_SCHEMA_NAME;

-- Then for each table, run:
SELECT GET_DDL('TABLE', 'YOUR_DATABASE.YOUR_SCHEMA.TABLE_NAME');

Method 4: Get Schema for Entire Database

-- Get DDL for all tables in a schema
SELECT GET_DDL('SCHEMA', 'YOUR_DATABASE.YOUR_SCHEMA');
ðŸ’Ą Tip: Snowflake's GET_DDL function is very powerful and returns the exact CREATE TABLE statements. Make sure to replace YOUR_DATABASE, YOUR_SCHEMA, and TABLE_NAME with your actual names. You can find your current database and schema by running: SELECT CURRENT_DATABASE(), CURRENT_SCHEMA();
🔍 Finding Your Tables: To see all tables in your current schema, run: SHOW TABLES;
⚠ïļ Important: After extracting your schema, copy the CREATE TABLE statements and paste them into the Text2SQL Database Schemas section. Make sure to include all tables that you want to query!