Struct pg_async::Cluster
[−]
[src]
pub struct Cluster { /* fields omitted */ }
A cluster of several replicated PostgreSQL nodes.
Methods
impl Cluster
[src]
fn new() -> Result<Cluster, String>
Start the thread.
fn connect(&self, dsn: String, mul: u8) -> Result<(), String>
Setup a database connection to a [replicated] node.
Replicated clusters have several nodes usually. This method should be used for each node.
Nodes can be added on the go. E.g. add a first node, fire some queries, add a second node.
dsn
- A keyword=value connection string.mul
- Pipelining support inlibpq
is currently limited to one batch of queries per connection, but parallelism can be increased by adding the same connection several times.
fn execute<I: IntoQueryPieces>(&self, sql: I) -> Result<PgFuture, String>
Schedule an SQL command to be executed on one of the nodes.
SQL will be run inside a transaction.
When using multiple statements, the library user must specify the exact number of top-level statements that the PostgreSQL server is going to see. For example:
// Running two statements as a single op: cluster.execute ((2, "SELECT 1; SELECT 2")); // Running three statements: cluster.execute ((3, "\ DELETE FROM foo; \ INSERT INTO foo VALUES (1); \ INSERT INTO foo VALUES (2)"));
To avoid SQL injection one might use the escapes provided by PgQueryPiece
:
use pg_async::PgQueryPiece::{Static as S, Plain as P, Literal as L, Bytea as B}; cluster.execute (vec! [S ("SELECT * FROM foo WHERE bar = "), L (bar)]);