}
}
+fn init_database(dbname: String, host: String, user: String, password: String) -> Result<()> {
+ println!("maybe creating the database");
+ let mut client = postgres::Config::new()
+ .dbname("postgres")
+ .host(&host)
+ .user(&user)
+ .password(password.clone())
+ .connect(NoTls)?;
+
+ let result =
+ client.query("SELECT 1 FROM pg_database WHERE datname=$1",&[&dbname])?;
+
+ if result.is_empty() {
+ println!("creating database {}", dbname);
+ client.execute(&format!("create database {}",dbname),&[])?;
+ } else {
+ println!("database {} exists already", dbname);
+ }
+ let _ = client.close();
+
+ println!("maybe creating database objects");
+ let mut client = postgres::Config::new()
+ .dbname(&dbname)
+ .host(&host)
+ .user(&user)
+ .password(password)
+ .connect(NoTls)?;
+
+ client.execute("CREATE EXTENSION IF NOT EXISTS vector", &[])?;
+ client.execute(
+ "CREATE TABLE if not exists documents \
+ (id serial PRIMARY KEY, content text, \
+ embedding vector(384))", &[])?;
+
+ Ok(())
+}
+
fn main() -> Result<()> {
let args = Args::parse();
match args.action {
Action::InitDatabase{ dbname, host, user, password } => {
-
- println!("maybe creating the database");
- let mut client = postgres::Config::new()
- .dbname("postgres")
- .host(&host)
- .user(&user)
- .password(password.clone())
- .connect(NoTls)?;
-
- let result =
- client.query("SELECT 1 FROM pg_database WHERE datname=$1",&[&dbname])?;
-
- if result.is_empty() {
- println!("creating database {}", dbname);
- client.execute(&format!("create database {}",dbname),&[])?;
- } else {
- println!("database {} exists already", dbname);
- }
- let _ = client.close();
-
- println!("maybe creating database objects");
- let mut client = postgres::Config::new()
- .dbname(&dbname)
- .host(&host)
- .user(&user)
- .password(password)
- .connect(NoTls)?;
-
- client.execute("CREATE EXTENSION IF NOT EXISTS vector", &[])?;
- client.execute(
- "CREATE TABLE if not exists documents \
- (id serial PRIMARY KEY, content text, \
- embedding vector(384))", &[])?;
-
+ init_database(dbname, host, user, password)?;
}
_ => {}
}