de0411ca31
Co-authored-by: Rob Ede <robjtede@icloud.com> |
||
---|---|---|
.. | ||
sql | ||
src | ||
.gitignore | ||
Cargo.toml | ||
README.md |
async_pg example
This example illustrates
tokio_postgres
- use of
tokio_pg_mapper
for postgres data mapping deadpool_postgres
for connection poolingdotenv
+config
for configuration
Instructions
NOTE:
You may need to ensure that you are running the commands with the correct SQL user.
On many Linux distributions you may prefix the shell commands with sudo -u postgres
-
Create database user
createuser -P test_user
Enter a password of your choice. The following instructions assume you used
testing
as password.This step is optional and you can also use an existing database user for that. Just make sure to replace
test_user
by the database user of your choice in the following steps and change the.env
file containing the configuration accordingly.An alternative using SQL:
CREATE USER test_user WITH PASSWORD 'testing';
-
Create database
createdb -O test_user testing_db
An alternative using SQL:
CREATE DATABASE testing_db OWNER test_user;
-
Initialize database
psql -f sql/schema.sql testing_db
This step can be repeated and clears the database as it drops and recreates the schema
testing
which is used within the database. -
Grant privileges to new user
GRANT ALL PRIVILEGES ON SCHEMA testing TO test_user; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA testing TO test_user; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA testing TO test_user;
-
Create
.env
file:SERVER_ADDR=127.0.0.1:8080 PG.USER=test_user PG.PASSWORD=testing PG.HOST=127.0.0.1 PG.PORT=5432 PG.DBNAME=testing_db PG.POOL.MAX_SIZE=16
-
Run the server:
cargo run
-
Using a different terminal send an HTTP POST request to the running server:
echo '{"email": "ferris@thecrab.com", "first_name": "ferris", "last_name": "crab", "username": "ferreal"}' | http -f --json --print h POST http://127.0.0.1:8080/users
...or using curl...
curl -i -d '{"email": "ferris@thecrab.com", "first_name": "ferris", "last_name": "crab", "username": "ferreal"}' -H 'Content-Type: application/json' http://127.0.0.1:8080/users
A unique constraint exists for username, so sending this request twice will return an internal server error (HTTP 500).