Skip to content

PostgreSQL Schema

Overview

A schema is a namespace within a database that contains database objects such as tables, views, indexes, and functions. Schemas allow you to organize database objects into logical groups and prevent naming conflicts.

Creating Schemas

sql
-- Create a new schema
CREATE SCHEMA myapp;

-- Create schema with owner
CREATE SCHEMA myapp AUTHORIZATION app_user;

-- Create schema with specific objects
CREATE SCHEMA myapp
    CREATE TABLE products (...);

-- Create schema if not exists
CREATE SCHEMA IF NOT EXISTS myapp;

Dropping Schemas

sql
-- Drop empty schema
DROP SCHEMA myapp;

-- Drop with contents
DROP SCHEMA myapp CASCADE;

-- Drop if exists
DROP SCHEMA IF EXISTS myapp;

Setting Search Path

sql
-- Show current search path
SHOW search_path;

-- Set search path
SET search_path TO myapp, public;

-- Set default search path for user
ALTER ROLE postgres SET search_path = 'myapp, public';

Object Qualification

sql
-- Access objects in specific schema
SELECT * FROM myapp.users;
SELECT * FROM myapp.products;

-- Create objects in specific schema
CREATE TABLE myapp.orders (...);
CREATE INDEX idx_users_name ON myapp.users(name);

Schema Information

sql
-- List all schemas
\dn

-- List schemas with details
SELECT 
    schema_name,
    schema_owner,
    schema_acl
FROM information_schema.schemata
ORDER BY schema_name;

-- List tables in a schema
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'myapp';

Multi-tenant Application

sql
-- Create schema for each tenant
CREATE SCHEMA tenant_alice;
CREATE SCHEMA tenant_bob;

-- Create tables in tenant schemas
CREATE TABLE tenant_alice.users (...);
CREATE TABLE tenant_bob.users (...);

Organization by Function

sql
-- Create functional schemas
CREATE SCHEMA accounting;
CREATE SCHEMA inventory;
CREATE SCHEMA sales;

-- Organize tables
CREATE TABLE accounting.journal_entries (...);
CREATE TABLE inventory.warehouse_locations (...);
CREATE TABLE sales.orders (...);

Content is for learning and research only.