API Reference (beta)
The holistic.dev API is organized around REST with JSON request and responses and uses standard HTTP response codes.
Authentication
x-api-key: Your API keyContent type
Content-Type: application/jsonURL and API versioning
Responses
// successful response
{
"status": "OK",
"data": {...}
}
}// error response
{
"status": "ERROR",
"data": {
"code": <http-code>,
"message": "<error-message>",
"details": <mixed-object(optional)>,
}
}Projects
Create project
project
Headers
Name
Type
Description
Request Body
Name
Type
Description
{
"status": "OK",
"data": {
"project": {
"date": "2020-01-01T00:00:00.000Z",
"name": "project name",
"uuid": "00000000-0000-0000-0000-000000000000"
}
}
}{
"project": {
"name": "project name",
"db": "pg"
}
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_PROJECT_NAME="<project-name>"; \
echo "{\"project\":{\"name\":\"$HOLISTICDEV_PROJECT_NAME\",\"db\":\"pg\"}}" | \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request POST --data @- https://api.holistic.dev/api/v1/project/Rename project
project
Headers
Name
Type
Description
Request Body
Name
Type
Description
{
"status": "OK",
"data": {
"project": {
"name": "project name",
"uuid": "00000000-0000-0000-0000-000000000000"
}
}
}{
"project": {
"name": "project name",
"uuid": "00000000-0000-0000-0000-000000000000"
}
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_PROJECT_NAME="<project-name>"; \
echo "{\"project\":{\"name\":\"$HOLISTICDEV_PROJECT_NAME\",\"db\":\"pg\"}}" | \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request PATCH --data @- https://api.holistic.dev/api/v1/project/List projects
project
Headers
Name
Type
Description
{
"data": [
{
"ddl": {
"ast": {
"elements": {
"comment": 62,
"parsed": 31
},
"errors": 0
},
"compiled": {
"functions": 0,
"operators": 0,
"relations": 12,
"schemas": 0,
"types": 0
},
"date": "2020-01-01T00:00:00.000Z",
"files": 2,
"issues": 0,
"uuid": "00000000-0000-0000-0000-000000000000"
},
"dml": {
"count": 1
},
"project": {
"date": "2020-01-01T00:00:00.000Z",
"db": "pg",
"name": "default",
"uuid": "00000000-0000-0000-0000-000000000000"
},
"users": {
"owner": "info@holistic.dev",
"shared": [
"support@holistic.dev"
]
}
}
],
"status": "OK"
}HOLISTICDEV_API_KEY="<your-api-key>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET https://api.holistic.dev/api/v1/project/Project details
project/:uuid/details
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"project": {
"date": "2020-01-01T00:00:00.000Z",
"db": "pg",
"name": "default",
"uuid": "00000000-0000-0000-0000-000000000000"
},
"users": {
"owner": "info@holistic.dev",
"shared": [
"support@holistic.dev"
]
}
},
"status": "OK"
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_PROJECT_UUID="<project-uuid>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET "https://api.holistic.dev/api/v1/project/$HOLISTICDEV_PROJECT_UUID/details"Project DDL details
project/:uuid/ddl
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"ddl": {
"ast": {
"elements": {
"comment": 62,
"parsed": 31
},
"errors": 0
},
"check": {
"status": "finished"
},
"compiled": {
"functions": 0,
"operators": 0,
"relations": 12,
"schemas": 0,
"types": 0
},
"date": "2020-01-01T00:00:00.000Z",
"files": 2,
"issues": 37,
"uuid": "00000000-0000-0000-0000-000000000000",
"version": null
}
},
"status": "OK"
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_PROJECT_UUID="<project-uuid>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET "https://api.holistic.dev/api/v1/project/$HOLISTICDEV_PROJECT_UUID/ddl"Project DMLs list
project/:uuid/dml/list
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": [
{
"dml": {
"check": {
"status": "finished"
},
"date": "booking-info.sql",
"issues": 0,
"name": "sql-name",
"source": {
"from": "api",
"sql": "SELECT \n b.book_ref,\n t.ticket_no,\n t.passenger_id,\n t.passenger_name,\n tf.fare_conditions,\n tf.amount,\n f.scheduled_departure_local,\n f.scheduled_arrival_local,\n f.departure_city || '(' || f.departure_airport || ')' as departure,\n f.arrival_city || '(' || f.arrival_airport || ')' as arrival,\n f.status,\n bp.seat_no\nFROM\n bookings b\n JOIN tickets t ON b.book_ref = t.book_ref\n JOIN ticket_flights tf ON tf.ticket_no = t.ticket_no\n JOIN flights_v f ON tf.flight_id = f.flight_id\n LEFT JOIN boarding_passes bp ON tf.flight_id = bp.flight_id AND tf.ticket_no = bp.ticket_no\nWHERE\n b.book_ref = '_QWE12'\nORDER BY\n t.ticket_no,\n f.scheduled_departure"
},
"uuid": "00000000-0000-0000-0000-000000000000",
"version": null
}
}
],
"status": "OK"
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_PROJECT_UUID="<project-uuid>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET "https://api.holistic.dev/api/v1/project/$HOLISTICDEV_PROJECT_UUID/dml/list"SQL Syntax
-- SUPPORTED:
SELECT $1, ${obj.name} , $/obj.name/, $[obj.name], $(obj.name)-- NOT SUPPORTED !!!
SELECT ?Database schema (DDL)
Extract DDL from database
PGPASSWORD=<pg-password> pg_dump -h <pg-host> -p <pg-port> -U <pg-username> \
-d <pg-db-name> --schema-only --no-owner --no-privileges --no-security-labels \
> ddl.sqlUpload DDL
ddl
Headers
Name
Type
Description
Request Body
Name
Type
Description
{
"status": "OK",
"data": {
"ddl": {
"uuid": "00000000-0000-0000-0000-000000000000"
}
}
}{
"project": {
"name": "default"
},
"ddl": {
"version": null
},
"files": [
{
"name": "filename-1.sql",
"source": "CREATE TABLE aircrafts_data (\n aircraft_code character(3) NOT NULL,\n model jsonb NOT NULL,\n range integer NOT NULL,\n CONSTRAINT aircrafts_range_check CHECK ((range > 0))\n);\n\nCREATE VIEW aircrafts AS\n SELECT ml.aircraft_code,\n (ml.model ->> lang()) AS model,\n ml.range\n FROM aircrafts_data ml;\n\n\n\nCREATE TABLE airports_data (\n airport_code character(3) NOT NULL,\n airport_name jsonb NOT NULL,\n city jsonb NOT NULL,\n coordinates point NOT NULL,\n timezone text NOT NULL\n);\n\n\n\nCREATE VIEW airports AS\n SELECT ml.airport_code,\n (ml.airport_name ->> lang()) AS airport_name,\n (ml.city ->> lang()) AS city,\n ml.coordinates,\n ml.timezone\n FROM airports_data ml;\n\n\n\nCREATE TABLE boarding_passes (\n ticket_no character(13) NOT NULL,\n flight_id integer NOT NULL,\n boarding_no integer NOT NULL,\n seat_no character varying(4) NOT NULL\n);"
},
{
"name": "filename-2.sql",
"source": "CREATE TABLE bookings (\n book_ref character(6) NOT NULL,\n book_date timestamp with time zone NOT NULL,\n total_amount numeric(10,2) NOT NULL\n);\n\n\nCREATE TABLE flights (\n flight_id integer NOT NULL,\n flight_no character(6) NOT NULL,\n scheduled_departure timestamp with time zone NOT NULL,\n scheduled_arrival timestamp with time zone NOT NULL,\n departure_airport character(3) NOT NULL,\n arrival_airport character(3) NOT NULL,\n status character varying(20) NOT NULL,\n aircraft_code character(3) NOT NULL,\n actual_departure timestamp with time zone,\n actual_arrival timestamp with time zone,\n CONSTRAINT flights_check CHECK ((scheduled_arrival > scheduled_departure)),\n CONSTRAINT flights_check1 CHECK (((actual_arrival IS NULL) OR ((actual_departure IS NOT NULL) AND (actual_arrival IS NOT NULL) AND (actual_arrival > actual_departure)))),\n CONSTRAINT flights_status_check CHECK (((status)::text = ANY (ARRAY[('On Time'::character varying)::text, ('Delayed'::character varying)::text, ('Departed'::character varying)::text, ('Arrived'::character varying)::text, ('Scheduled'::character varying)::text, ('Cancelled'::character varying)::text])))\n);\n\n\nCREATE VIEW flights_v AS\n SELECT f.flight_id,\n f.flight_no,\n f.scheduled_departure,\n timezone(dep.timezone, f.scheduled_departure) AS scheduled_departure_local,\n f.scheduled_arrival,\n timezone(arr.timezone, f.scheduled_arrival) AS scheduled_arrival_local,\n (f.scheduled_arrival - f.scheduled_departure) AS scheduled_duration,\n f.departure_airport,\n dep.airport_name AS departure_airport_name,\n dep.city AS departure_city,\n f.arrival_airport,\n arr.airport_name AS arrival_airport_name,\n arr.city AS arrival_city,\n f.status,\n f.aircraft_code,\n f.actual_departure,\n timezone(dep.timezone, f.actual_departure) AS actual_departure_local,\n f.actual_arrival,\n timezone(arr.timezone, f.actual_arrival) AS actual_arrival_local,\n (f.actual_arrival - f.actual_departure) AS actual_duration\n FROM flights f,\n airports dep,\n airports arr\n WHERE ((f.departure_airport = dep.airport_code) AND (f.arrival_airport = arr.airport_code));\n\n\n\nCREATE VIEW routes AS\n WITH f3 AS (\n SELECT f2.flight_no,\n f2.departure_airport,\n f2.arrival_airport,\n f2.aircraft_code,\n f2.duration,\n array_agg(f2.days_of_week) AS days_of_week\n FROM ( SELECT f1.flight_no,\n f1.departure_airport,\n f1.arrival_airport,\n f1.aircraft_code,\n f1.duration,\n f1.days_of_week\n FROM ( SELECT flights.flight_no,\n flights.departure_airport,\n flights.arrival_airport,\n flights.aircraft_code,\n (flights.scheduled_arrival - flights.scheduled_departure) AS duration,\n (to_char(flights.scheduled_departure, 'ID'::text))::integer AS days_of_week\n FROM flights) f1\n GROUP BY f1.flight_no, f1.departure_airport, f1.arrival_airport, f1.aircraft_code, f1.duration, f1.days_of_week\n ORDER BY f1.flight_no, f1.departure_airport, f1.arrival_airport, f1.aircraft_code, f1.duration, f1.days_of_week) f2\n GROUP BY f2.flight_no, f2.departure_airport, f2.arrival_airport, f2.aircraft_code, f2.duration\n )\n SELECT f3.flight_no,\n f3.departure_airport,\n dep.airport_name AS departure_airport_name,\n dep.city AS departure_city,\n f3.arrival_airport,\n arr.airport_name AS arrival_airport_name,\n arr.city AS arrival_city,\n f3.aircraft_code,\n f3.duration,\n f3.days_of_week\n FROM f3,\n airports dep,\n airports arr\n WHERE ((f3.departure_airport = dep.airport_code) AND (f3.arrival_airport = arr.airport_code));\n\n\nCREATE TABLE seats (\n aircraft_code character(3) NOT NULL,\n seat_no character varying(4) NOT NULL,\n fare_conditions character varying(10) NOT NULL,\n CONSTRAINT seats_fare_conditions_check CHECK (((fare_conditions)::text = ANY (ARRAY[('Economy'::character varying)::text, ('Comfort'::character varying)::text, ('Business'::character varying)::text])))\n);\n\n\nCREATE TABLE ticket_flights (\n ticket_no character(13) NOT NULL,\n flight_id integer NOT NULL,\n fare_conditions character varying(10) NOT NULL,\n amount numeric(10,2) NOT NULL,\n CONSTRAINT ticket_flights_amount_check CHECK ((amount >= (0)::numeric)),\n CONSTRAINT ticket_flights_fare_conditions_check CHECK (((fare_conditions)::text = ANY (ARRAY[('Economy'::character varying)::text, ('Comfort'::character varying)::text, ('Business'::character varying)::text])))\n);\n\n\n\nCREATE TABLE tickets (\n ticket_no character(13) NOT NULL,\n book_ref character(6) NOT NULL,\n passenger_id character varying(20) NOT NULL,\n passenger_name text NOT NULL,\n contact_data jsonb\n);\n\n\nALTER TABLE ONLY aircrafts_data\n ADD CONSTRAINT aircrafts_pkey PRIMARY KEY (aircraft_code);\n\n\nALTER TABLE ONLY airports_data\n ADD CONSTRAINT airports_data_pkey PRIMARY KEY (airport_code);\n\n\nALTER TABLE ONLY boarding_passes\n ADD CONSTRAINT boarding_passes_flight_id_boarding_no_key UNIQUE (flight_id, boarding_no);\n\n\nALTER TABLE ONLY boarding_passes\n ADD CONSTRAINT boarding_passes_flight_id_seat_no_key UNIQUE (flight_id, seat_no);\n\n\nALTER TABLE ONLY boarding_passes\n ADD CONSTRAINT boarding_passes_pkey PRIMARY KEY (ticket_no, flight_id);\n\nALTER TABLE ONLY bookings\n ADD CONSTRAINT bookings_pkey PRIMARY KEY (book_ref);\n\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_flight_no_scheduled_departure_key UNIQUE (flight_no, scheduled_departure);\n\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_pkey PRIMARY KEY (flight_id);\n\n\nALTER TABLE ONLY seats\n ADD CONSTRAINT seats_pkey PRIMARY KEY (aircraft_code, seat_no);\n\n\nALTER TABLE ONLY ticket_flights\n ADD CONSTRAINT ticket_flights_pkey PRIMARY KEY (ticket_no, flight_id);\n\n\nALTER TABLE ONLY tickets\n ADD CONSTRAINT tickets_pkey PRIMARY KEY (ticket_no);\n\n\nALTER TABLE ONLY boarding_passes\n ADD CONSTRAINT boarding_passes_ticket_no_fkey FOREIGN KEY (ticket_no, flight_id) REFERENCES ticket_flights(ticket_no, flight_id);\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_aircraft_code_fkey FOREIGN KEY (aircraft_code) REFERENCES aircrafts_data(aircraft_code);\n\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_arrival_airport_fkey FOREIGN KEY (arrival_airport) REFERENCES airports_data(airport_code);\n\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_departure_airport_fkey FOREIGN KEY (departure_airport) REFERENCES airports_data(airport_code);\n\n\nALTER TABLE ONLY seats\n ADD CONSTRAINT seats_aircraft_code_fkey FOREIGN KEY (aircraft_code) REFERENCES aircrafts_data(aircraft_code) ON DELETE CASCADE;\n\n\nALTER TABLE ONLY ticket_flights\n ADD CONSTRAINT ticket_flights_flight_id_fkey FOREIGN KEY (flight_id) REFERENCES flights(flight_id);\n\n\nALTER TABLE ONLY ticket_flights\n ADD CONSTRAINT ticket_flights_ticket_no_fkey FOREIGN KEY (ticket_no) REFERENCES tickets(ticket_no);\n\n\n\nALTER TABLE ONLY tickets\n ADD CONSTRAINT tickets_book_ref_fkey FOREIGN KEY (book_ref) REFERENCES bookings(book_ref);"
}
]
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_PROJECT_NAME="<project-name>"; \
DATA=$(cat ddl.sql | base64 -w0)
echo "{\"project\":{\"name\":\"$HOLISTICDEV_PROJECT_NAME\"},\"ddl\":{\"version\":null},\"files\":[{\"name\":\"ddl.sql\",\"source\":\"$DATA\"}]}" | \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request POST --data @- https://api.holistic.dev/api/v1/ddl/
Patch DDL
ddl
Headers
Name
Type
Description
Request Body
Name
Type
Description
{
"status": "OK",
"data": {
"ddl": {
"uuid": "00000000-0000-0000-0000-000000000000"
}
}
}{
"project": {
"name": "default"
},
"ddl": {
"version": null
},
"source": "CREATE INDEX ON aircrafts_data (aircraft_code)"
}Get DDL source
ddl/:uuid/source
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"ddl": [
{
"file": {
"name": "filename-1.sql",
"ordernum": 0,
"source": "CREATE TABLE aircrafts_data (\n aircraft_code character(3) NOT NULL,\n model jsonb NOT NULL,\n range integer NOT NULL,\n CONSTRAINT aircrafts_range_check CHECK ((range > 0))\n);\n\nCREATE VIEW aircrafts AS\n SELECT ml.aircraft_code,\n (ml.model ->> lang()) AS model,\n ml.range\n FROM aircrafts_data ml;\n\n\n\nCREATE TABLE airports_data (\n airport_code character(3) NOT NULL,\n airport_name jsonb NOT NULL,\n city jsonb NOT NULL,\n coordinates point NOT NULL,\n timezone text NOT NULL\n);\n\n\n\nCREATE VIEW airports AS\n SELECT ml.airport_code,\n (ml.airport_name ->> lang()) AS airport_name,\n (ml.city ->> lang()) AS city,\n ml.coordinates,\n ml.timezone\n FROM airports_data ml;\n\n\n\nCREATE TABLE boarding_passes (\n ticket_no character(13) NOT NULL,\n flight_id integer NOT NULL,\n boarding_no integer NOT NULL,\n seat_no character varying(4) NOT NULL\n);"
},
"uuid": "00000000-0000-0000-0000-000000000000",
"version": null
},
{
"file": {
"name": "filename-2.sql",
"ordernum": 2,
"source": "CREATE TABLE bookings (\n book_ref character(6) NOT NULL,\n book_date timestamp with time zone NOT NULL,\n total_amount numeric(10,2) NOT NULL\n);\n\n\nCREATE TABLE flights (\n flight_id integer NOT NULL,\n flight_no character(6) NOT NULL,\n scheduled_departure timestamp with time zone NOT NULL,\n scheduled_arrival timestamp with time zone NOT NULL,\n departure_airport character(3) NOT NULL,\n arrival_airport character(3) NOT NULL,\n status character varying(20) NOT NULL,\n aircraft_code character(3) NOT NULL,\n actual_departure timestamp with time zone,\n actual_arrival timestamp with time zone,\n CONSTRAINT flights_check CHECK ((scheduled_arrival > scheduled_departure)),\n CONSTRAINT flights_check1 CHECK (((actual_arrival IS NULL) OR ((actual_departure IS NOT NULL) AND (actual_arrival IS NOT NULL) AND (actual_arrival > actual_departure)))),\n CONSTRAINT flights_status_check CHECK (((status)::text = ANY (ARRAY[('On Time'::character varying)::text, ('Delayed'::character varying)::text, ('Departed'::character varying)::text, ('Arrived'::character varying)::text, ('Scheduled'::character varying)::text, ('Cancelled'::character varying)::text])))\n);\n\n\nCREATE VIEW flights_v AS\n SELECT f.flight_id,\n f.flight_no,\n f.scheduled_departure,\n timezone(dep.timezone, f.scheduled_departure) AS scheduled_departure_local,\n f.scheduled_arrival,\n timezone(arr.timezone, f.scheduled_arrival) AS scheduled_arrival_local,\n (f.scheduled_arrival - f.scheduled_departure) AS scheduled_duration,\n f.departure_airport,\n dep.airport_name AS departure_airport_name,\n dep.city AS departure_city,\n f.arrival_airport,\n arr.airport_name AS arrival_airport_name,\n arr.city AS arrival_city,\n f.status,\n f.aircraft_code,\n f.actual_departure,\n timezone(dep.timezone, f.actual_departure) AS actual_departure_local,\n f.actual_arrival,\n timezone(arr.timezone, f.actual_arrival) AS actual_arrival_local,\n (f.actual_arrival - f.actual_departure) AS actual_duration\n FROM flights f,\n airports dep,\n airports arr\n WHERE ((f.departure_airport = dep.airport_code) AND (f.arrival_airport = arr.airport_code));\n\n\n\nCREATE VIEW routes AS\n WITH f3 AS (\n SELECT f2.flight_no,\n f2.departure_airport,\n f2.arrival_airport,\n f2.aircraft_code,\n f2.duration,\n array_agg(f2.days_of_week) AS days_of_week\n FROM ( SELECT f1.flight_no,\n f1.departure_airport,\n f1.arrival_airport,\n f1.aircraft_code,\n f1.duration,\n f1.days_of_week\n FROM ( SELECT flights.flight_no,\n flights.departure_airport,\n flights.arrival_airport,\n flights.aircraft_code,\n (flights.scheduled_arrival - flights.scheduled_departure) AS duration,\n (to_char(flights.scheduled_departure, 'ID'::text))::integer AS days_of_week\n FROM flights) f1\n GROUP BY f1.flight_no, f1.departure_airport, f1.arrival_airport, f1.aircraft_code, f1.duration, f1.days_of_week\n ORDER BY f1.flight_no, f1.departure_airport, f1.arrival_airport, f1.aircraft_code, f1.duration, f1.days_of_week) f2\n GROUP BY f2.flight_no, f2.departure_airport, f2.arrival_airport, f2.aircraft_code, f2.duration\n )\n SELECT f3.flight_no,\n f3.departure_airport,\n dep.airport_name AS departure_airport_name,\n dep.city AS departure_city,\n f3.arrival_airport,\n arr.airport_name AS arrival_airport_name,\n arr.city AS arrival_city,\n f3.aircraft_code,\n f3.duration,\n f3.days_of_week\n FROM f3,\n airports dep,\n airports arr\n WHERE ((f3.departure_airport = dep.airport_code) AND (f3.arrival_airport = arr.airport_code));\n\n\nCREATE TABLE seats (\n aircraft_code character(3) NOT NULL,\n seat_no character varying(4) NOT NULL,\n fare_conditions character varying(10) NOT NULL,\n CONSTRAINT seats_fare_conditions_check CHECK (((fare_conditions)::text = ANY (ARRAY[('Economy'::character varying)::text, ('Comfort'::character varying)::text, ('Business'::character varying)::text])))\n);\n\n\nCREATE TABLE ticket_flights (\n ticket_no character(13) NOT NULL,\n flight_id integer NOT NULL,\n fare_conditions character varying(10) NOT NULL,\n amount numeric(10,2) NOT NULL,\n CONSTRAINT ticket_flights_amount_check CHECK ((amount >= (0)::numeric)),\n CONSTRAINT ticket_flights_fare_conditions_check CHECK (((fare_conditions)::text = ANY (ARRAY[('Economy'::character varying)::text, ('Comfort'::character varying)::text, ('Business'::character varying)::text])))\n);\n\n\n\nCREATE TABLE tickets (\n ticket_no character(13) NOT NULL,\n book_ref character(6) NOT NULL,\n passenger_id character varying(20) NOT NULL,\n passenger_name text NOT NULL,\n contact_data jsonb\n);\n\n\nALTER TABLE ONLY aircrafts_data\n ADD CONSTRAINT aircrafts_pkey PRIMARY KEY (aircraft_code);\n\n\nALTER TABLE ONLY airports_data\n ADD CONSTRAINT airports_data_pkey PRIMARY KEY (airport_code);\n\n\nALTER TABLE ONLY boarding_passes\n ADD CONSTRAINT boarding_passes_flight_id_boarding_no_key UNIQUE (flight_id, boarding_no);\n\n\nALTER TABLE ONLY boarding_passes\n ADD CONSTRAINT boarding_passes_flight_id_seat_no_key UNIQUE (flight_id, seat_no);\n\n\nALTER TABLE ONLY boarding_passes\n ADD CONSTRAINT boarding_passes_pkey PRIMARY KEY (ticket_no, flight_id);\n\nALTER TABLE ONLY bookings\n ADD CONSTRAINT bookings_pkey PRIMARY KEY (book_ref);\n\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_flight_no_scheduled_departure_key UNIQUE (flight_no, scheduled_departure);\n\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_pkey PRIMARY KEY (flight_id);\n\n\nALTER TABLE ONLY seats\n ADD CONSTRAINT seats_pkey PRIMARY KEY (aircraft_code, seat_no);\n\n\nALTER TABLE ONLY ticket_flights\n ADD CONSTRAINT ticket_flights_pkey PRIMARY KEY (ticket_no, flight_id);\n\n\nALTER TABLE ONLY tickets\n ADD CONSTRAINT tickets_pkey PRIMARY KEY (ticket_no);\n\n\nALTER TABLE ONLY boarding_passes\n ADD CONSTRAINT boarding_passes_ticket_no_fkey FOREIGN KEY (ticket_no, flight_id) REFERENCES ticket_flights(ticket_no, flight_id);\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_aircraft_code_fkey FOREIGN KEY (aircraft_code) REFERENCES aircrafts_data(aircraft_code);\n\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_arrival_airport_fkey FOREIGN KEY (arrival_airport) REFERENCES airports_data(airport_code);\n\n\nALTER TABLE ONLY flights\n ADD CONSTRAINT flights_departure_airport_fkey FOREIGN KEY (departure_airport) REFERENCES airports_data(airport_code);\n\n\nALTER TABLE ONLY seats\n ADD CONSTRAINT seats_aircraft_code_fkey FOREIGN KEY (aircraft_code) REFERENCES aircrafts_data(aircraft_code) ON DELETE CASCADE;\n\n\nALTER TABLE ONLY ticket_flights\n ADD CONSTRAINT ticket_flights_flight_id_fkey FOREIGN KEY (flight_id) REFERENCES flights(flight_id);\n\n\nALTER TABLE ONLY ticket_flights\n ADD CONSTRAINT ticket_flights_ticket_no_fkey FOREIGN KEY (ticket_no) REFERENCES tickets(ticket_no);\n\n\n\nALTER TABLE ONLY tickets\n ADD CONSTRAINT tickets_book_ref_fkey FOREIGN KEY (book_ref) REFERENCES bookings(book_ref);"
},
"uuid": "00000000-0000-0000-0000-000000000000",
"version": null
}
],
"project": {
"name": "default",
"uuid": "00000000-0000-0000-0000-000000000000"
}
},
"status": "OK"
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_DDL_UUID="<ddl-uuid>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET "https://api.holistic.dev/api/v1/ddl/$HOLISTICDEV_DDL_UUID/source/"Get DDL abstract syntax tree
ddl/:uuid/ast
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"ddl": {
"ast": [<abstract syntax tree>],
},
},
"status": "OK"
}Example:
HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_DDL_UUID="<ddl-uuid>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET "https://api.holistic.dev/api/v1/ddl/$HOLISTICDEV_DDL_UUID/ast/"Get DDL compiled object
ddl/:uuid/object
Path Parameters
Name
Type
Description
Query Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"ddl": {
"object": {
"types": [<user defined types>],
"functions": [<user defined functions>],
"operators": [<user defined operators>],
"sequences": [<sequences>],
"schemas": [<non-default schemas>],
"extensions": [<extensions>],
"relations": [<relations>]
},
},
},
"status": "OK"
}Example:
HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_DDL_UUID="<ddl-uuid>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET "https://api.holistic.dev/api/v1/ddl/$HOLISTICDEV_DDL_UUID/object/"SQL query (DML)
Upload DML
dml
Headers
Name
Type
Description
Request Body
Name
Type
Description
{
"status": "OK",
"data": {
"dml": {
"uuid": "00000000-0000-0000-0000-000000000000"
}
}
}{
"project": {
"name": "default"
},
"ddl": {
"version": null
},
"dml": {
"name": "booking-info.sql",
"version": null,
"source": {
"sql": "SELECT \n b.book_ref,\n t.ticket_no,\n t.passenger_id,\n t.passenger_name,\n tf.fare_conditions,\n tf.amount,\n f.scheduled_departure_local,\n f.scheduled_arrival_local,\n f.departure_city || '(' || f.departure_airport || ')' as departure,\n f.arrival_city || '(' || f.arrival_airport || ')' as arrival,\n f.status,\n bp.seat_no\nFROM\n bookings b\n JOIN tickets t ON b.book_ref = t.book_ref\n JOIN ticket_flights tf ON tf.ticket_no = t.ticket_no\n JOIN flights_v f ON tf.flight_id = f.flight_id\n LEFT JOIN boarding_passes bp ON tf.flight_id = bp.flight_id AND tf.ticket_no = bp.ticket_no\nWHERE\n b.book_ref = '_QWE12'\nORDER BY\n t.ticket_no,\n f.scheduled_departure"
}
}
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_PROJECT_NAME="<project-name>"; \
DATA=$(cat ddl.sql | base64 -w0)
echo "{\"project\":{\"name\":\"$HOLISTICDEV_PROJECT_NAME\"},\"ddl\":{\"version\":null},\"dml\":{\"name\":\"dml.sql\", \"version\": null, \"source\":{ \"sql\":\"$DATA\"}}}" | \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request POST --data @- https://api.holistic.dev/api/v1/dml/
Get DML source
dml/:uuid/source
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"dml": {
"name": "booking-info.sql",
"source": {
"from": "api",
"sql": "SELECT \n b.book_ref,\n t.ticket_no,\n t.passenger_id,\n t.passenger_name,\n tf.fare_conditions,\n tf.amount,\n f.scheduled_departure_local,\n f.scheduled_arrival_local,\n f.departure_city || '(' || f.departure_airport || ')' as departure,\n f.arrival_city || '(' || f.arrival_airport || ')' as arrival,\n f.status,\n bp.seat_no\nFROM\n bookings b\n JOIN tickets t ON b.book_ref = t.book_ref\n JOIN ticket_flights tf ON tf.ticket_no = t.ticket_no\n JOIN flights_v f ON tf.flight_id = f.flight_id\n LEFT JOIN boarding_passes bp ON tf.flight_id = bp.flight_id AND tf.ticket_no = bp.ticket_no\nWHERE\n b.book_ref = '_QWE12'\nORDER BY\n t.ticket_no,\n f.scheduled_departure"
},
"uuid": "00000000-0000-0000-0000-000000000000",
"version": null
},
"project": {
"name": "default",
"uuid": "00000000-0000-0000-0000-000000000000"
}
},
"status": "OK"
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_DML_UUID="<dml-uuid>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET "https://api.holistic.dev/api/v1/dml/$HOLISTICDEV_DML_UUID/source/"Get DML abstract syntax tree
dml/:uuid/ast
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"dml": {
"ast": [<abstract syntax tree>],
},
},
"status": "OK"
}Example:
HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_DML_UUID="<dml-uuid>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET "https://api.holistic.dev/api/v1/dml/$HOLISTICDEV_DML_UUID/ast/"Get DML compiled object
dml/:uuid/object
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"dml": {
"object": [<compiled object>],
},
},
"status": "OK"
}Example:
HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_DML_UUID="<dml-uuid>"; \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request GET "https://api.holistic.dev/api/v1/dml/$HOLISTICDEV_DML_UUID/object/"pg_stat_statements and pg_stat_monitor
-- pg_stat_statements
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
-- pg_stat_monitor
CREATE EXTENSION pg_stat_monitor;pg_stat_statements
Headers
Name
Type
Description
Request Body
Name
Type
Description
{
"status": "OK",
"data": {
"pgss": {
"income": 100,
"new": 100
}
}
}HOLISTICDEV_API_KEY="<your-api-key>" HOLISTICDEV_PROJECT_NAME="<project-name>"; \
PG=$(PGPASSWORD=<pg-password> psql -t -A -h <pg-host> -p <pg-port> -U <pg-username> -d <pg-db-name> -c "SELECT json_agg(u) FROM (SELECT DISTINCT ON (queryid) queryid :: varchar as name, query as source, SUM(calls) :: varchar AS calls, SUM(total_time) :: varchar AS total_time, MIN(min_time) :: varchar AS min_time, MAX(max_time) :: varchar AS max_time, AVG(mean_time) :: varchar AS mean_time, SUM(rows) :: varchar AS rows FROM pg_stat_statements pgss JOIN pg_database pgd ON pgss.dbid = pgd.oid WHERE pgd.datname = current_database() AND queryid IS NOT NULL GROUP BY queryid, query) u" | base64 -w0); \
echo "{\"pgss\":\"$PG\", \"project\":{\"name\":\"$HOLISTICDEV_PROJECT_NAME\"}}" | \
curl \
--header "x-api-key: $HOLISTICDEV_API_KEY" \
--header "Content-Type: application/json" \
--request POST --data @- https://api.holistic.dev/api/v1/pg_stat_statements/Check Results
ddl/:uuid/check-result
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"ddl": {
"uuid": "00000000-0000-0000-0000-000000000000"
},
"analysis": {
"ddl": [
[
{
"name": "char-type",
"description": "Recommended avoid to use a precision specification for CHAR type for column \"aircraft_code\" in relation \"aircrafts_data\"",
"location": 1,
"position": {
"line": 1,
"column": 1
}
}
]
],
"dml": [],
"config": [
{
"char-type": "warning"
}
],
"statistics": {
"ddl": {
"kind": {
"architect": 14,
"error": 0,
"performance": 13
},
"total": 25
},
"dml": {
"kind": {
"architect": 30,
"error": 0,
"performance": 21
},
"total": 38
},
"common": {
"kind": {
"architect": 7,
"error": 0,
"performance": 0
},
"total": 7
}
}
}
},
"status": "OK"
}project/:uuid/ddl/check-result
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"ddl": {
"uuid": "00000000-0000-0000-0000-000000000000"
},
"analysis": {
"ddl": [
[
{
"name": "char-type",
"description": "Recommended avoid to use a precision specification for CHAR type for column \"aircraft_code\" in relation \"aircrafts_data\"",
"location": 1,
"position": {
"line": 1,
"column": 1
}
}
]
],
"dml": [],
"config": [
{
"char-type": "warning"
}
],
"statistics": {
"ddl": {
"kind": {
"architect": 14,
"error": 0,
"performance": 13
},
"total": 25
},
"dml": {
"kind": {
"architect": 30,
"error": 0,
"performance": 21
},
"total": 38
},
"common": {
"kind": {
"architect": 7,
"error": 0,
"performance": 0
},
"total": 7
}
}
}
},
"status": "OK"
}dml/:uuid/check-result
Path Parameters
Name
Type
Description
Headers
Name
Type
Description
{
"data": {
"dml": {
"uuid": "00000000-0000-0000-0000-000000000000"
},
"analysis": {
"ddl": [],
"dml": [],
"config": [],
"statistics": {
"ddl": {
"kind": {
"architect": 14,
"error": 0,
"performance": 13
},
"total": 25
},
"dml": {
"kind": {
"architect": 30,
"error": 0,
"performance": 21
},
"total": 38
},
"common": {
"kind": {
"architect": 7,
"error": 0,
"performance": 0
},
"total": 7
}
}
}
},
"status": "OK"
}Errors
Error statuses
Error response messages
Last updated