rpjs
rpjs

Reputation: 309

Wasm-rust and postgres

is there a way to get data from a database in postgres using wasm?. I'd tried to get it using a library in rust but I got some errore when I build the package using "wasm-pack building--target web". The idea is to build a function in lib.rs file that return data from a db. I have the below code inside lib.rs:

use postgres::{Client, Error, NoTls};
use wasm_bindgen::prelude::*;
...

struct Author {
    _id: i32,
    name: String,
}

#[wasm_bindgen]
pub fn select_name(name: &String) -> Result<(), Error> {
    let mut client = Client::connect("postgresql://user:1234@localhost:5432/db", NoTls)?;    
    for row in client.query(
        "SELECT id, name FROM author WHERE name = $1",
        &[&name],
    )? {
        let author = Author {
            _id: row.get(0),
            name: row.get(1),
        };
        println!(
            "Select_Name => Author {} :",
            author.name
        );
    }
    Ok(())
}

but I get some errors:

error[E0432]: unresolved import `crate::sys::IoSourceState`
error[E0432]: unresolved import `crate::sys`
...

Upvotes: 2

Views: 1116

Answers (1)

Grzesiek
Grzesiek

Reputation: 715

It is not possible directly (as Njuguna Mureithi rightly wrote) but it can be circumvented.

We can use the project: https://github.com/PostgREST/postgrest and expose the API to our sql server.

We download the latest version of postgrest https://github.com/PostgREST/postgrest/releases/tag/v9.0.0 in case of Linux we unpack

tar -xf postgrest-v9.0.0-linux-static-x64.tar.xz

then run help

./postgrest -h

create a configuration file for ./postgrest

postgrest -e > cfg.psqlrest

change the user and password for the database in the configuration file. e.g. with

db-uri = "postgres://user:pasword@localhost:5432/dbname"

to your dbname database access user:pasword configuration

db-uri = "postgres://postgres:zaqwsxc@localhost:5432/dbname"

and run the server which will issue the api to our postgres

./postgrest cfg.psqlrest

The address http://localhost:3000 will start accessing the database dbname, which must be created in the database server beforehand.

Here is a description of the libraries needed to call the query using the API.

https://rustwasm.github.io/wasm-bindgen/examples/fetch.html

examples of API https://postgrest.org/en/stable/api.html

Upvotes: 0

Related Questions