Loading Data - DockerΒΆ
Let us understand how you can take care of loading data into Postgres Database running using Docker Container.
Make sure database is created along with the user with right permissions. Also the user who want to use
COPY
command need to have pg_read_server_files role assigned.Create file with sample data
Copy file into Docker container
Connect to Database
Create the table
Run
COPY
Command to copy the data.
Prepare Data
We need to create file with sample data and copy the files into the container.
Sample File In this case data is added to users.csv under ~/sms_db.
user_first_name,user_last_name,user_email_id,user_role,created_dt
Gordan,Bradock,gbradock0@barnesandnoble.com,A,2020-01-10
Tobe,Lyness,tlyness1@paginegialle.it,U,2020-02-10
Addie,Mesias,amesias2@twitpic.com,U,2020-03-05
Corene,Kohrsen,ckohrsen3@buzzfeed.com,U,2020-04-15
Darill,Halsall,dhalsall4@intel.com,U,2020-10-10
Copy data
docker cp ~/sms_db/users.csv itv_pg:/tmp
Create Database
Here are the steps to create database.
Connect to database as super user postgres
docker exec -it itv_pg psql -U postgres
Create the database with right permissions.
CREATE DATABASE itversity_sms_db;
CREATE USER itversity_sms_user WITH PASSWORD 'sms_password';
GRANT ALL ON DATABASE itversity_sms_db TO itversity_sms_user;
GRANT pg_read_server_files TO itversity_sms_user;
Exit using
\q
Connect to Database
Use this command to connect to the newly created database.
psql -U itversity_sms_user \
-h localhost \
-p 5433 \
-d itversity_sms_db \
-W
Create Table
Here is the script to create the table.
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
user_first_name VARCHAR(30) NOT NULL,
user_last_name VARCHAR(30) NOT NULL,
user_email_id VARCHAR(50) NOT NULL,
user_email_validated BOOLEAN DEFAULT FALSE,
user_password VARCHAR(200),
user_role VARCHAR(1) NOT NULL DEFAULT 'U', --U and A
is_active BOOLEAN DEFAULT FALSE,
created_dt DATE DEFAULT CURRENT_DATE
);
Load Data
Here are the steps to load and validate the data using psql
.
Load data using
COPY
Command
COPY users(user_first_name, user_last_name,
user_email_id, user_role, created_dt
) FROM '/tmp/users.csv'
DELIMITER ','
CSV HEADER;
Validate by running queries
SELECT * FROM users;