Variables #

SELECT supports $VARIABLE references in SQL files. Variables are resolved from .env files, other SQL files, or prompted from the user at runtime.

Environment variables #

Define variables in a .env file and reference them with $VAR_NAME:

# .env
API_KEY=sk-123456
TENANT=acme
SELECT * FROM users WHERE tenant = $TENANT;

SELECT substitutes variables before execution with proper SQL escaping: text values are single-quoted, numbers are inserted as-is, booleans become TRUE/FALSE.

SQL file references #

Reference another SQL file in the same folder by name. $setup resolves to the content of setup.sql, letting you compose queries from reusable fragments:

-- setup.sql
CREATE TEMP TABLE active_users AS
SELECT id FROM users WHERE active = true;

-- main.sql
$setup
SELECT * FROM active_users WHERE created_at > '2024-01-01';

SQL file references are expanded recursively, so referenced files can themselves contain $VAR references.

Runtime variable prompting #

When a $VARIABLE is not found in any .env file or SQL file, SELECT prompts you to fill it in before execution. A form appears with one field per unresolved variable.

Each variable can be typed:

Type SQL output
text 'value' (single-quoted, escaped)
integer 42 (unquoted)
decimal 3.14 (unquoted)
boolean TRUE or FALSE
date '2024-01-15'
timestamp '2024-01-15 09:30:00'
time '09:30:00'

Runtime variable values are persisted per file per tab, so they pre-fill on subsequent runs. This is useful for queries you run repeatedly with different parameters.

Runtime variables turn any SQL file into a reusable parameterized query without modifying .env.