2.2 KiB
Function: grok_validate_order_by_columns
Overview
This function validates that specified order-by columns exist in a source table and contain data that can be parsed as timestamps, ensuring they can be used for deterministic ordering.
Schema
config.grok_validate_order_by_columns
Parameters
source_schema
(text): Schema containing the source tablesource_table
(text): Name of the source tableorder_by_columns
(text[]): Array of column names to validate
Return Value
Returns a text array containing warning messages for any issues found:
{
"Warning: column_name not found in schema.table",
"Warning: column_name contains unparseable timestamp data: error message"
}
Description
This function validates columns intended for use in ORDER BY clauses, particularly for generating synthetic keys in materialized views. It performs two types of validation:
- Existence Check: Verifies each column exists in the specified table
- Timestamp Parsing: Tests if each column's data can be parsed as a timestamp
For timestamp parsing, the function attempts to convert the column data using:
TO_TIMESTAMP(SUBSTRING(NULLIF(column, ''), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
This validation approach ensures that:
- Columns are valid for the source table
- Timestamp columns can be parsed consistently
- The ORDER BY clause will produce deterministic results
Timestamp Parsing Details
The timestamp parsing logic:
- Uses NULLIF to handle NULL values
- Takes only the first 19 characters using SUBSTRING
- Uses a fixed format of 'YYYY-MM-DD HH24:MI:SS'
This standardized parsing ensures consistent ordering behavior regardless of the actual format stored in the column.
Error Handling
The function collects warnings without failing, allowing for a complete validation report:
- Missing columns generate a warning
- Unparseable timestamp data generates a warning with the specific error
- If an unexpected error occurs, it returns a general error message
Dependencies
This function is likely called by other functions that create materialized views to validate order-by columns before using them.
Usage Example
SELECT config.grok_validate_order_by_columns(
'public',
'customers',
ARRAY['created_at', 'updated_at']
);