use tokio_postgres::Client;
use crate::executor::ApplyError;
pub async fn compute_target_identity(client: &Client) -> Result<String, ApplyError> {
let row = client
.query_one(
"SELECT
current_database(),
inet_server_addr()::text,
inet_server_port(),
current_setting('cluster_name', true),
(SELECT system_identifier::text FROM pg_control_system())",
&[],
)
.await?;
let mut h = blake3::Hasher::new();
h.update(b"pgevolve-target-id-v1\n");
for i in 0..5 {
let s: Option<String> = row.try_get(i).ok();
if let Some(v) = s {
h.update(v.as_bytes());
}
h.update(&[0]);
}
let full = hex::encode(h.finalize().as_bytes());
Ok(full[..16].to_string())
}