Bird
Raised Fist0
PostgreSQLquery~5 mins

Public schema vs custom schemas in PostgreSQL - Quick Revision & Key Differences

Choose your learning style10 modes available
Recall & Review
beginner
What is the public schema in PostgreSQL?
The public schema is the default schema created in every new PostgreSQL database. It is a shared space where database objects like tables and functions are stored if no other schema is specified.
Click to reveal answer
beginner
Why would you create a custom schema in PostgreSQL?
Custom schemas help organize database objects into separate namespaces. This improves clarity, security, and management by grouping related objects and avoiding name conflicts.
Click to reveal answer
intermediate
How does PostgreSQL find a table when you run a query without specifying a schema?
PostgreSQL searches schemas in the order listed in the search_path setting. By default, it looks in the public schema first, then others if configured.
Click to reveal answer
intermediate
Can multiple schemas have tables with the same name in PostgreSQL?
Yes. Schemas act like folders. Different schemas can have tables with the same name without conflict because the full name includes the schema name.
Click to reveal answer
beginner
How do you specify a table in a custom schema in a SQL query?
Use the format schema_name.table_name. For example, sales.orders refers to the orders table in the sales schema.
Click to reveal answer
What is the default schema in a new PostgreSQL database?
Acustom
Bdefault
Cmain
Dpublic
Why use custom schemas instead of only the public schema?
ATo organize objects and avoid name conflicts
BTo slow down queries
CTo delete the public schema
DTo store backups
If two schemas have a table named 'users', how does PostgreSQL know which one to use?
AIt throws an error
BIt merges both tables automatically
CIt uses the search_path order or explicit schema name
DIt always uses the public schema
How do you write a query to select from a table named 'orders' in a schema named 'sales'?
ASELECT * FROM sales.orders;
BSELECT * FROM orders.sales;
CSELECT * FROM public.orders;
DSELECT * FROM orders;
What happens if you create a table without specifying a schema in PostgreSQL?
AThe creation fails
BIt is created in the public schema by default
CIt is created in a new schema
DIt is created in the root directory
Explain the difference between the public schema and custom schemas in PostgreSQL.
Think about why you might want to separate tables into different groups.
You got /4 concepts.
    Describe how PostgreSQL uses the search_path to find tables when no schema is specified.
    Imagine looking for a file in folders one by one.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the role of the public schema in PostgreSQL?
      easy
      A. It is a special schema that cannot contain tables or other objects.
      B. It is the default schema where database objects are created if no schema is specified.
      C. It is used only for system tables and cannot be modified by users.
      D. It automatically encrypts all data stored within it.

      Solution

      1. Step 1: Understand the default schema concept

        In PostgreSQL, the public schema is created by default in every new database.
      2. Step 2: Identify the role of the public schema

        When you create tables or other objects without specifying a schema, they go into the public schema automatically.
      3. Final Answer:

        It is the default schema where database objects are created if no schema is specified. -> Option B
      4. Quick Check:

        Default schema = public [OK]
      Hint: Remember: public schema is default for new objects [OK]
      Common Mistakes:
      • Thinking public schema is read-only
      • Assuming public schema is for system tables only
      • Believing public schema encrypts data automatically
      2. Which of the following is the correct way to create a new schema named sales in PostgreSQL?
      easy
      A. CREATE SCHEMA sales;
      B. CREATE DATABASE sales;
      C. NEW SCHEMA sales;
      D. MAKE SCHEMA sales;

      Solution

      1. Step 1: Recall the SQL syntax for creating schemas

        The correct SQL command to create a schema is CREATE SCHEMA schema_name;.
      2. Step 2: Check each option

        CREATE SCHEMA sales; uses the correct syntax. MAKE SCHEMA sales;, CREATE DATABASE sales;, and NEW SCHEMA sales; are invalid SQL commands for creating schemas.
      3. Final Answer:

        CREATE SCHEMA sales; -> Option A
      4. Quick Check:

        CREATE SCHEMA = create new schema [OK]
      Hint: Use CREATE SCHEMA to make new schemas [OK]
      Common Mistakes:
      • Using CREATE DATABASE instead of CREATE SCHEMA
      • Using non-existent commands like NEW SCHEMA or MAKE SCHEMA
      • Forgetting the semicolon at the end
      3. Given the following commands:
      CREATE SCHEMA marketing;
      CREATE TABLE marketing.campaigns (id SERIAL PRIMARY KEY, name TEXT);
      SET search_path TO marketing, public;
      SELECT * FROM campaigns;

      What will be the result of the SELECT query?
      medium
      A. It will return rows from a campaigns table in the public schema if it exists.
      B. It will cause an error because the table name is not schema-qualified.
      C. It will return all rows from the marketing.campaigns table.
      D. It will return no rows because search_path is set incorrectly.

      Solution

      1. Step 1: Understand search_path usage

        The search_path is set to look first in marketing schema, then public.
      2. Step 2: Identify which table is found

        The table campaigns exists in marketing schema, so the query finds and returns data from marketing.campaigns.
      3. Final Answer:

        It will return all rows from the marketing.campaigns table. -> Option C
      4. Quick Check:

        search_path order finds marketing first [OK]
      Hint: search_path order decides which schema is used first [OK]
      Common Mistakes:
      • Assuming table must be schema-qualified always
      • Thinking query errors without schema prefix
      • Ignoring search_path order
      4. You run this command:
      SELECT * FROM sales.orders;

      But get the error: ERROR: schema "sales" does not exist.
      What is the most likely cause?
      medium
      A. The sales schema has not been created yet.
      B. The orders table does not exist in the public schema.
      C. You forgot to set the search_path to include sales.
      D. You need to use double quotes around sales.

      Solution

      1. Step 1: Analyze the error message

        The error says the schema "sales" does not exist, meaning PostgreSQL cannot find that schema.
      2. Step 2: Identify the cause

        This usually means the schema was never created or was dropped, so the database has no knowledge of it.
      3. Final Answer:

        The sales schema has not been created yet. -> Option A
      4. Quick Check:

        Schema missing causes this error [OK]
      Hint: Check if schema exists before querying it [OK]
      Common Mistakes:
      • Assuming search_path affects schema existence errors
      • Thinking table absence causes schema not found error
      • Trying to fix with quotes unnecessarily
      5. You want to organize your database by creating two schemas: hr and finance. You create tables with the same name employees in both schemas. How can you write a query to select all employees from the finance schema without changing the search_path?
      hard
      A. SELECT * FROM public.employees WHERE schema = 'finance';
      B. SET search_path TO finance; SELECT * FROM employees;
      C. SELECT * FROM employees WHERE schema = 'finance';
      D. SELECT * FROM finance.employees;

      Solution

      1. Step 1: Understand schema-qualified table names

        When tables have the same name in different schemas, you can specify the schema explicitly before the table name.
      2. Step 2: Identify the correct query

        SELECT * FROM finance.employees; uses finance.employees which directly accesses the table in the finance schema without changing search_path.
      3. Final Answer:

        SELECT * FROM finance.employees; -> Option D
      4. Quick Check:

        Schema-qualified names access tables directly [OK]
      Hint: Use schema.table to access specific schema tables [OK]
      Common Mistakes:
      • Trying to filter by schema column which doesn't exist
      • Changing search_path unnecessarily
      • Assuming public schema contains all tables
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard