The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/plugins/datasource/grafana-postgresql-datasource/postgresMetaQuery.ts

56 lines
2.1 KiB

export function getVersion() {
return "SELECT current_setting('server_version_num')::int/100 as version";
}
export function getTimescaleDBVersion() {
return "SELECT extversion FROM pg_extension WHERE extname = 'timescaledb'";
}
export function showTables() {
return `SELECT
CASE WHEN ${buildSchemaConstraint()}
THEN quote_ident(table_name)
ELSE quote_ident(table_schema) || '.' || quote_ident(table_name)
END AS "table"
FROM information_schema.tables
WHERE quote_ident(table_schema) NOT IN ('information_schema',
'pg_catalog',
'_timescaledb_cache',
'_timescaledb_catalog',
'_timescaledb_internal',
'_timescaledb_config',
'timescaledb_information',
'timescaledb_experimental')
ORDER BY CASE WHEN ${buildSchemaConstraint()} THEN 0 ELSE 1 END, 1`;
}
export function getSchema(table: string) {
// we will put table-name between single-quotes, so we need to escape single-quotes
// in the table-name
const tableNamePart = "'" + table.replace(/'/g, "''") + "'";
return `SELECT quote_ident(column_name) AS "column", data_type AS "type"
FROM information_schema.columns
WHERE
CASE WHEN array_length(parse_ident(${tableNamePart}),1) = 2
THEN quote_ident(table_schema) = (parse_ident(${tableNamePart}))[1]
AND quote_ident(table_name) = (parse_ident(${tableNamePart}))[2]
ELSE quote_ident(table_name) = ${tableNamePart}
AND ${buildSchemaConstraint()}
END`;
}
function buildSchemaConstraint() {
// quote_ident protects hyphenated schemes
return `
quote_ident(table_schema) IN (
SELECT
CASE WHEN trim(s[i]) = '"$user"' THEN user ELSE trim(s[i]) END
FROM
generate_series(
array_lower(string_to_array(current_setting('search_path'),','),1),
array_upper(string_to_array(current_setting('search_path'),','),1)
) as i,
string_to_array(current_setting('search_path'),',') s
)`;
}