📖 Scenario: You are managing a small company's database using PostgreSQL. The company has different departments like Sales and HR, and you want to keep their data organized and separate inside the same database.
🎯 Goal: Build a simple PostgreSQL setup that creates two schemas named sales and hr, then create a table inside each schema to store department-specific employee data.
📋 What You'll Learn
Create two schemas named sales and hr
Create a table named employees inside the sales schema with columns id (integer) and name (text)
Create a table named employees inside the hr schema with columns id (integer) and name (text)
Understand how schemas help keep tables organized and avoid name conflicts
💡 Why This Matters
🌍 Real World
Companies often have multiple departments with similar data needs. Schemas help keep their data organized and separate inside one database.
💼 Career
Database administrators and developers use schemas to manage complex databases, avoid naming conflicts, and improve security by controlling access at the schema level.
Progress0 / 4 steps
1
Create the sales schema
Write a SQL command to create a schema called sales in PostgreSQL.
PostgreSQL
Hint
Use the CREATE SCHEMA statement followed by the schema name.
2
Create the hr schema
Write a SQL command to create a schema called hr in PostgreSQL.
PostgreSQL
Hint
Use the same CREATE SCHEMA statement as before but with the name hr.
3
Create employees table in sales schema
Write a SQL command to create a table named employees inside the sales schema. The table should have two columns: id as an integer and name as text.
PostgreSQL
Hint
Use CREATE TABLE sales.employees and define the columns inside parentheses.
4
Create employees table in hr schema
Write a SQL command to create a table named employees inside the hr schema. The table should have two columns: id as an integer and name as text.
PostgreSQL
Hint
Use CREATE TABLE hr.employees and define the columns inside parentheses.
Practice
(1/5)
1. What is the main purpose of schemas in PostgreSQL?
easy
A. To speed up query execution automatically
B. To store user passwords securely
C. To organize database objects like folders
D. To backup the entire database
Solution
Step 1: Understand what schemas do
Schemas act like folders to group tables, views, and other objects in a database.
Step 2: Identify the main purpose
This grouping helps organize and separate objects logically.
Final Answer:
To organize database objects like folders -> Option C
Quick Check:
Schemas = Organize objects [OK]
Hint: Think of schemas as folders for database objects [OK]
Common Mistakes:
Confusing schemas with backups
Thinking schemas speed up queries automatically
Believing schemas store passwords
2. Which of the following is the correct way to create a schema named sales in PostgreSQL?
easy
A. NEW SCHEMA sales;
B. MAKE SCHEMA sales;
C. CREATE DATABASE sales;
D. CREATE SCHEMA sales;
Solution
Step 1: Recall PostgreSQL syntax for schema creation
The correct command to create a schema is CREATE SCHEMA schema_name;.
Step 2: Match the options
Only CREATE SCHEMA sales; uses the correct syntax CREATE SCHEMA sales;.
Final Answer:
CREATE SCHEMA sales; -> Option D
Quick Check:
CREATE SCHEMA = create schema [OK]
Hint: Use CREATE SCHEMA to make new schemas [OK]
Common Mistakes:
Using MAKE SCHEMA instead of CREATE SCHEMA
Confusing CREATE SCHEMA with CREATE DATABASE
Using NEW SCHEMA which is invalid syntax
3. Given two schemas public and sales both containing a table named customers, what will the query SELECT * FROM customers; return if the search_path is set to sales, public?
medium
A. Rows from sales.customers table
B. Rows from public.customers table
C. An error because of ambiguous table name
D. No rows because table is not found
Solution
Step 1: Understand search_path order
PostgreSQL looks for tables in schemas in the order listed in search_path.
Step 2: Apply search_path to table lookup
Since sales is first, customers from sales schema is used.
Final Answer:
Rows from sales.customers table -> Option A
Quick Check:
search_path order decides table used [OK]
Hint: search_path order picks first matching schema table [OK]
Common Mistakes:
Assuming ambiguous error occurs
Thinking public schema is always default
Believing query fails if multiple tables exist
4. You run CREATE TABLE sales.orders (id SERIAL PRIMARY KEY, amount NUMERIC); but get an error saying schema "sales" does not exist. What is the best fix?
medium
A. Restart PostgreSQL server
B. Create the sales schema first using CREATE SCHEMA sales;
C. Change table name to public.orders
D. Use CREATE DATABASE sales; instead
Solution
Step 1: Identify cause of error
Error says schema "sales" does not exist, so PostgreSQL cannot create table there.
Step 2: Fix by creating missing schema
Run CREATE SCHEMA sales; to create the schema before creating the table.
Final Answer:
Create the sales schema first using CREATE SCHEMA sales; -> Option B
Quick Check:
Missing schema? Create it first [OK]
Hint: Create schema before creating tables in it [OK]
Common Mistakes:
Trying to create database instead of schema
Restarting server unnecessarily
Changing table name without schema
5. You want to restrict access so only the marketing team can read tables in the marketing schema, while the sales team can only access sales schema tables. Which approach best uses schemas to achieve this?
hard
A. Create separate schemas marketing and sales and grant SELECT only to respective teams
B. Put all tables in public schema and grant SELECT to both teams
C. Create one schema and use table-level permissions for each team
D. Use different databases for marketing and sales teams
Solution
Step 1: Understand schema-based permission control
Schemas allow grouping tables and setting permissions at schema level.
Step 2: Apply separate schemas with team-specific grants
Creating marketing and sales schemas and granting SELECT only to respective teams isolates access cleanly.
Final Answer:
Create separate schemas marketing and sales and grant SELECT only to respective teams -> Option A
Quick Check:
Schemas help isolate permissions by team [OK]
Hint: Use schemas to separate data and control access [OK]
Common Mistakes:
Granting all access in public schema
Using one schema with complex table permissions
Using separate databases unnecessarily
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.