mirror of
https://github.com/grafana/grafana.git
synced 2025-09-20 12:59:27 +08:00

* Postgresql: Support tables from non-default schema - Add support for schema-qualified table names. - Partially resolve an issue where the column type of a table from the wrong schema with the same table name was incorrectly used. Now limited to tables of schemas within the search_path. * Support schema in raw query editor --------- Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
57 lines
2.1 KiB
TypeScript
57 lines
2.1 KiB
TypeScript
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
|
|
)`;
|
|
}
|