Skip to content

Database Blocks

Database blocks allow you to integrate database querying with your runbook. All input fields are first run through the templating system, making it easy to parameterize your database operations.

Available Database Blocks

  • ClickHouse


    Connect to ClickHouse databases for analytics and OLAP queries.

    Learn more

  • MySQL


    Connect to MySQL databases with full SQL query support.

    Learn more

  • PostgreSQL


    Connect to PostgreSQL databases with advanced features.

    Learn more

  • SQLite


    Work with local SQLite databases for lightweight operations.

    Learn more

Block Output

All SQL database blocks produce structured output that can be accessed in templates after execution. See Block Output for general information on accessing block output.

Accessing Query Results

{%- set output = doc.named['my_query'].output %}

{# Access rows from SELECT queries #}
{% for row in output.rows %}
  {{ row.column_name }}
{% endfor %}

Output Fields

Field Type Description
results array All query results (for multi-statement queries)
first object The first result (convenience accessor)
rows array Rows from the first SELECT query
columns array Column definitions from the first SELECT query
total_rows number Total row count across all SELECT results
total_rows_affected number Total rows affected by INSERT/UPDATE/DELETE
rows_affected number Rows affected by the first statement
total_duration number Total execution time in seconds
result_count number Number of results (for multi-statement queries)

Example Usage

{%- set output = doc.named['user_query'].output %}

{# Check if we got results #}
{% if output.total_rows > 0 %}
  Found {{ output.total_rows }} users:
  {% for row in output.rows %}
  - {{ row.name }} ({{ row.email }})
  {% endfor %}
{% else %}
  No users found.
{% endif %}

Multi-Statement Queries

SQL blocks support multiple statements separated by semicolons. Each statement produces a separate result:

SELECT COUNT(*) as total FROM users;
SELECT * FROM users LIMIT 5;

Access individual results via the results array:

{%- set output = doc.named['multi_query'].output %}
Total users: {{ output.results[0].data.rows[0].total }}
First 5 users: {{ output.results[1].data.rows }}