mirror of
https://github.com/spring-projects/spring-petclinic.git
synced 2026-01-05 18:11:11 +00:00
The postgres user needs to be an owner of the public schema or a
superuser in order to execute the schema.sql for database
initialization.
To avoid that, two changes are required:
- use `CREATE TABLE IF NOT EXISTS` in order to idempotently create the
necessary tables
- handle conflicts when inserting duplicate data
This follows the pattern in use by the
src/main/resources/db/mysql/{data,schema.sql} files.
Authored-by: Shaan Sapra <shsapra@vmware.com>
52 lines
1.4 KiB
SQL
52 lines
1.4 KiB
SQL
CREATE TABLE IF NOT EXISTS vets (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
first_name TEXT,
|
|
last_name TEXT
|
|
);
|
|
CREATE INDEX ON vets (last_name);
|
|
|
|
CREATE TABLE IF NOT EXISTS specialties (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name TEXT
|
|
);
|
|
CREATE INDEX ON specialties (name);
|
|
|
|
CREATE TABLE IF NOT EXISTS vet_specialties (
|
|
vet_id INT NOT NULL REFERENCES vets (id),
|
|
specialty_id INT NOT NULL REFERENCES specialties (id),
|
|
UNIQUE (vet_id, specialty_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS types (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name TEXT
|
|
);
|
|
CREATE INDEX ON types (name);
|
|
|
|
CREATE TABLE IF NOT EXISTS owners (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
first_name TEXT,
|
|
last_name TEXT,
|
|
address TEXT,
|
|
city TEXT,
|
|
telephone TEXT
|
|
);
|
|
CREATE INDEX ON owners (last_name);
|
|
|
|
CREATE TABLE IF NOT EXISTS pets (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name TEXT,
|
|
birth_date DATE,
|
|
type_id INT NOT NULL REFERENCES types (id),
|
|
owner_id INT NOT NULL REFERENCES owners (id)
|
|
);
|
|
CREATE INDEX ON pets (name);
|
|
CREATE INDEX ON pets (owner_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS visits (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
pet_id INT NOT NULL REFERENCES pets (id),
|
|
visit_date DATE,
|
|
description TEXT
|
|
);
|
|
CREATE INDEX ON visits (pet_id);
|