risedev/task/
postgres_service.rs1use crate::PostgresConfig;
16use crate::task::docker_service::{DockerService, DockerServiceConfig};
17
18impl DockerServiceConfig for PostgresConfig {
19 fn id(&self) -> String {
20 self.id.clone()
21 }
22
23 fn is_user_managed(&self) -> bool {
24 self.user_managed
25 }
26
27 fn image(&self) -> String {
28 self.image.clone()
29 }
30
31 fn args(&self) -> Vec<String> {
32 [
34 "-c",
35 "wal_level=logical",
36 "-c",
37 "max_replication_slots=30",
38 "-c",
39 "log_statement=all",
40 ]
41 .map(String::from)
42 .to_vec()
43 }
44
45 fn envs(&self) -> Vec<(String, String)> {
46 vec![
47 ("POSTGRES_HOST_AUTH_METHOD".to_owned(), "trust".to_owned()),
48 ("POSTGRES_USER".to_owned(), self.user.clone()),
49 ("POSTGRES_PASSWORD".to_owned(), self.password.clone()),
50 ("POSTGRES_DB".to_owned(), self.database.clone()),
51 (
52 "POSTGRES_INITDB_ARGS".to_owned(),
53 "--encoding=UTF-8 --lc-collate=C --lc-ctype=C".to_owned(),
54 ),
55 ]
56 }
57
58 fn ports(&self) -> Vec<(String, String)> {
59 vec![(self.port.to_string(), "5432".to_owned())]
60 }
61
62 fn data_path(&self) -> Option<String> {
63 self.persist_data
64 .then(|| "/var/lib/postgresql/data".to_owned())
65 }
66
67 fn latency_ms(&self) -> u32 {
68 self.latency_ms
69 }
70}
71
72pub type PostgresService = DockerService<PostgresConfig>;