PostgreSQL
Beginner
1 min read
Creating SQL and PL/pgSQL Functions
Example
-- Simple SQL function
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC, rate NUMERIC DEFAULT 0.08)
RETURNS NUMERIC AS $$
SELECT ROUND(price * rate, 2);
$$ LANGUAGE sql IMMUTABLE;
SELECT calculate_tax(99.99); -- 8.00
SELECT calculate_tax(99.99, 0.10); -- 10.00
-- PL/pgSQL function with control flow
CREATE OR REPLACE FUNCTION get_user_tier(user_id INTEGER)
RETURNS TEXT AS $$
DECLARE
lifetime_spend NUMERIC;
tier TEXT;
BEGIN
SELECT COALESCE(SUM(total), 0)
INTO lifetime_spend
FROM orders
WHERE orders.user_id = get_user_tier.user_id
AND status = 'completed';
tier := CASE
WHEN lifetime_spend >= 5000 THEN 'platinum'
WHEN lifetime_spend >= 1000 THEN 'gold'
WHEN lifetime_spend >= 100 THEN 'silver'
ELSE 'bronze'
END;
RETURN tier;
END;
$$ LANGUAGE plpgsql STABLE;
SELECT id, name, get_user_tier(id) AS tier FROM users LIMIT 10;
Related Resources
PostgreSQL Reference
Complete tag & property list
PostgreSQL How-To Guides
Step-by-step practical guides
PostgreSQL Exercises
Practice what you've learned
More in PostgreSQL