Concept Flow - Dynamic SQL with EXECUTE
Start
Build SQL string dynamically
Use EXECUTE to run SQL string
Process results or finish
End
Dynamic SQL is built as a text string and then run using EXECUTE inside a PL/pgSQL block.
DO $$ DECLARE tbl_name text := 'users'; sql_cmd text; result_count integer; BEGIN sql_cmd := 'SELECT count(*) FROM ' || tbl_name; EXECUTE sql_cmd INTO result_count; RAISE NOTICE 'Count: %', result_count; END $$;
| Step | Action | Variable Values | Result/Output |
|---|---|---|---|
| 1 | Declare tbl_name = 'users' | tbl_name='users' | No output |
| 2 | Build sql_cmd = 'SELECT count(*) FROM users' | sql_cmd='SELECT count(*) FROM users' | No output |
| 3 | EXECUTE sql_cmd INTO result_count | result_count=number of rows in users | No output |
| 4 | RAISE NOTICE 'Count: %', result_count | result_count=42 (example) | Output: 'Count: 42' |
| 5 | End block | All variables finalized | Execution ends |
| Variable | Start | After Step 2 | After Step 3 | Final |
|---|---|---|---|---|
| tbl_name | NULL | 'users' | 'users' | 'users' |
| sql_cmd | NULL | 'SELECT count(*) FROM users' | 'SELECT count(*) FROM users' | 'SELECT count(*) FROM users' |
| result_count | NULL | NULL | 42 | 42 |
Dynamic SQL with EXECUTE in PostgreSQL: - Build SQL command as a text string - Use EXECUTE to run the string inside PL/pgSQL - Use INTO to capture query results - Allows flexible queries with variable table or column names - Must carefully construct valid SQL strings