This commit is contained in:
124
generate_sql_test_data.sh
Executable file
124
generate_sql_test_data.sh
Executable file
@@ -0,0 +1,124 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Script to generate test data for PostgreSQL backup testing
|
||||
# This script creates two tables with a foreign key relationship and populates them with test data
|
||||
|
||||
# Database connection parameters
|
||||
PGHOST="${PGHOST:-localhost}"
|
||||
PGPORT="${PGPORT:-5432}"
|
||||
PGDATABASE="${PGDATABASE:-testdb}"
|
||||
PGUSER="${PGUSER:-testuser}"
|
||||
PGPASSWORD="${PGPASSWORD:-testpass}"
|
||||
|
||||
# Export password for psql
|
||||
export PGPASSWORD
|
||||
|
||||
echo "Generating test data for PostgreSQL database..."
|
||||
|
||||
# Create tables
|
||||
echo "Creating tables..."
|
||||
psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$PGDATABASE" << 'EOF'
|
||||
-- Drop tables if they exist
|
||||
DROP TABLE IF EXISTS orders CASCADE;
|
||||
DROP TABLE IF EXISTS customers CASCADE;
|
||||
|
||||
-- Create customers table
|
||||
CREATE TABLE customers (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
email VARCHAR(100) UNIQUE NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Create orders table with foreign key to customers
|
||||
CREATE TABLE orders (
|
||||
id SERIAL PRIMARY KEY,
|
||||
customer_id INTEGER NOT NULL REFERENCES customers(id) ON DELETE CASCADE,
|
||||
product_name VARCHAR(100) NOT NULL,
|
||||
quantity INTEGER NOT NULL CHECK (quantity > 0),
|
||||
price DECIMAL(10,2) NOT NULL CHECK (price >= 0),
|
||||
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Create indexes for better performance
|
||||
CREATE INDEX idx_orders_customer_id ON orders(customer_id);
|
||||
CREATE INDEX idx_customers_email ON customers(email);
|
||||
CREATE INDEX idx_orders_order_date ON orders(order_date);
|
||||
EOF
|
||||
|
||||
# Insert test data
|
||||
echo "Inserting test data..."
|
||||
psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$PGDATABASE" << 'EOF'
|
||||
-- Insert customers
|
||||
INSERT INTO customers (name, email) VALUES
|
||||
('John Doe', 'john.doe@example.com'),
|
||||
('Jane Smith', 'jane.smith@example.com'),
|
||||
('Bob Johnson', 'bob.johnson@example.com'),
|
||||
('Alice Brown', 'alice.brown@example.com'),
|
||||
('Charlie Wilson', 'charlie.wilson@example.com'),
|
||||
('Diana Davis', 'diana.davis@example.com'),
|
||||
('Eve Miller', 'eve.miller@example.com'),
|
||||
('Frank Garcia', 'frank.garcia@example.com'),
|
||||
('Grace Lee', 'grace.lee@example.com'),
|
||||
('Henry Taylor', 'henry.taylor@example.com');
|
||||
|
||||
-- Insert orders
|
||||
INSERT INTO orders (customer_id, product_name, quantity, price) VALUES
|
||||
(1, 'Laptop', 1, 999.99),
|
||||
(1, 'Mouse', 2, 25.50),
|
||||
(2, 'Keyboard', 1, 75.00),
|
||||
(2, 'Monitor', 1, 299.99),
|
||||
(3, 'Headphones', 1, 150.00),
|
||||
(3, 'Webcam', 1, 89.99),
|
||||
(4, 'Tablet', 1, 399.99),
|
||||
(4, 'Stylus', 1, 49.99),
|
||||
(5, 'Smartphone', 1, 699.99),
|
||||
(5, 'Case', 1, 19.99),
|
||||
(6, 'Desktop', 1, 1299.99),
|
||||
(6, 'RAM', 2, 79.99),
|
||||
(7, 'SSD', 1, 199.99),
|
||||
(7, 'Graphics Card', 1, 599.99),
|
||||
(8, 'Motherboard', 1, 199.99),
|
||||
(8, 'CPU', 1, 399.99),
|
||||
(9, 'Power Supply', 1, 149.99),
|
||||
(9, 'Cooling Fan', 2, 29.99),
|
||||
(10, 'Cable Set', 1, 39.99),
|
||||
(10, 'USB Hub', 1, 24.99);
|
||||
EOF
|
||||
|
||||
# Verify data
|
||||
echo "Verifying test data..."
|
||||
psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$PGDATABASE" << 'EOF'
|
||||
-- Show table counts
|
||||
SELECT 'customers' as table_name, COUNT(*) as row_count FROM customers
|
||||
UNION ALL
|
||||
SELECT 'orders' as table_name, COUNT(*) as row_count FROM orders;
|
||||
|
||||
-- Show sample data
|
||||
SELECT 'Sample customers:' as info;
|
||||
SELECT id, name, email FROM customers LIMIT 5;
|
||||
|
||||
SELECT 'Sample orders:' as info;
|
||||
SELECT o.id, c.name as customer_name, o.product_name, o.quantity, o.price
|
||||
FROM orders o
|
||||
JOIN customers c ON o.customer_id = c.id
|
||||
LIMIT 5;
|
||||
|
||||
-- Show foreign key relationship
|
||||
SELECT 'Foreign key relationship check:' as info;
|
||||
SELECT
|
||||
c.name as customer_name,
|
||||
COUNT(o.id) as order_count,
|
||||
SUM(o.price * o.quantity) as total_spent
|
||||
FROM customers c
|
||||
LEFT JOIN orders o ON c.id = o.customer_id
|
||||
GROUP BY c.id, c.name
|
||||
ORDER BY total_spent DESC;
|
||||
EOF
|
||||
|
||||
echo "Test data generation completed successfully!"
|
||||
echo "Database contains:"
|
||||
echo "- 10 customers"
|
||||
echo "- 20 orders with foreign key relationships"
|
||||
echo "- Various data types and constraints"
|
||||
Reference in New Issue
Block a user