AdvancedAdvanced PostgreSQL

Dynamic SQL with EXECUTE

The query

SQL
DO $$
DECLARE
  v_table_name TEXT := 'employees';
  v_column     TEXT := 'salary';
  v_result     NUMERIC;
  v_sql        TEXT;
BEGIN
  v_sql := FORMAT('SELECT AVG(%I) FROM %I WHERE status = $1', v_column, v_table_name);

  EXECUTE v_sql INTO v_result USING 'active';

  RAISE NOTICE 'Average % in % for active: %', v_column, v_table_name, v_result;
END;
$$;
Tested against PostgreSQL 16

Note

Dynamic SQL with EXECUTE. Use %I for identifiers (prevents SQL injection). $1 with USING for safe value binding.

Tables referenced