Skip to content

adds postgres version to the schema cache. #141

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions crates/pg_schema_cache/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#![feature(future_join)]

mod functions;
mod versions;
mod schema_cache;
mod schemas;
mod tables;
Expand Down
8 changes: 6 additions & 2 deletions crates/pg_schema_cache/src/schema_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ use crate::functions::Function;
use crate::schemas::Schema;
use crate::tables::Table;
use crate::types::PostgresType;
use crate::versions::Version;

#[derive(Debug, Clone, Default)]
pub struct SchemaCache {
pub schemas: Vec<Schema>,
pub tables: Vec<Table>,
pub functions: Vec<Function>,
pub types: Vec<PostgresType>,
pub versions: Vec<Version>,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any reason to have a Vec instead of a single struct?

}

impl SchemaCache {
Expand All @@ -21,11 +23,12 @@ impl SchemaCache {
}

pub async fn load(pool: &PgPool) -> SchemaCache {
let (schemas, tables, functions, types) = join!(
let (schemas, tables, functions, types, versions) = join!(
Schema::load(pool),
Table::load(pool),
Function::load(pool),
PostgresType::load(pool)
PostgresType::load(pool),
Version::load(pool),
)
.await;

Expand All @@ -34,6 +37,7 @@ impl SchemaCache {
tables,
functions,
types,
versions,
}
}

Expand Down
43 changes: 43 additions & 0 deletions crates/pg_schema_cache/src/versions.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
use sqlx::PgPool;

use crate::schema_cache::SchemaCacheItem;

#[derive(Debug, Clone, Default)]
pub struct Version {
pub version: Option<String>,
pub version_num: Option<i64>,
pub active_connections: Option<i64>,
pub max_connections: Option<i64>,
}

impl SchemaCacheItem for Version {
type Item = Version;

async fn load(pool: &PgPool) -> Vec<Version> {
sqlx::query_as!(
Version,
r#"select
version(),
current_setting('server_version_num') :: int8 AS version_num,
(
select
count(*) :: int8 AS active_connections
FROM
pg_stat_activity
) AS active_connections,
current_setting('max_connections') :: int8 AS max_connections;"#
)
.fetch_all(pool)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not just one row?

.await
.unwrap()
}

/*
Sample Output:
-[ RECORD 1 ]------+--------------------------------------------------------------------------------------------------------------------------
version | PostgreSQL 15.7 (Debian 15.7-1.pgdg120+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
version_num | 150007
active_connections | 8
max_connections | 100
*/
}
Loading