autoschool.sql 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054
  1. --
  2. -- PostgreSQL database dump
  3. --
  4. \restrict wUhTUEtP7H3sZbn0Sj8yBWOgI7rW8eGIJqHJvYsaK1avC0CCtslcJ40NJgPs7Rm
  5. -- Dumped from database version 18.0
  6. -- Dumped by pg_dump version 18.0
  7. -- Started on 2026-06-02 17:20:08
  8. SET statement_timeout = 0;
  9. SET lock_timeout = 0;
  10. SET idle_in_transaction_session_timeout = 0;
  11. SET transaction_timeout = 0;
  12. SET client_encoding = 'UTF8';
  13. SET standard_conforming_strings = on;
  14. SELECT pg_catalog.set_config('search_path', '', false);
  15. SET check_function_bodies = false;
  16. SET xmloption = content;
  17. SET client_min_messages = warning;
  18. SET row_security = off;
  19. --
  20. -- TOC entry 10 (class 2615 OID 442812)
  21. -- Name: akulova_vs; Type: SCHEMA; Schema: -; Owner: akulova_vs
  22. --
  23. CREATE SCHEMA akulova_vs;
  24. ALTER SCHEMA akulova_vs OWNER TO akulova_vs;
  25. --
  26. -- TOC entry 2457 (class 1247 OID 448285)
  27. -- Name: app_role; Type: TYPE; Schema: akulova_vs; Owner: akulova_vs
  28. --
  29. CREATE TYPE akulova_vs.app_role AS ENUM (
  30. 'admin',
  31. 'user'
  32. );
  33. ALTER TYPE akulova_vs.app_role OWNER TO akulova_vs;
  34. --
  35. -- TOC entry 1805 (class 1255 OID 454368)
  36. -- Name: fn_audit_log_changes(); Type: FUNCTION; Schema: akulova_vs; Owner: akulova_vs
  37. --
  38. CREATE FUNCTION akulova_vs.fn_audit_log_changes() RETURNS trigger
  39. LANGUAGE plpgsql
  40. AS $$
  41. declare
  42. pk_column text := tg_argv[0];
  43. row_data jsonb;
  44. current_record_id integer;
  45. begin
  46. if tg_op = 'DELETE' then
  47. row_data := to_jsonb(old);
  48. else
  49. row_data := to_jsonb(new);
  50. end if;
  51. current_record_id := nullif(row_data ->> pk_column, '')::integer;
  52. insert into akulova_vs.audit_log (
  53. table_name,
  54. operation,
  55. record_id,
  56. changed_by,
  57. old_data,
  58. new_data
  59. ) values (
  60. tg_table_name,
  61. tg_op,
  62. current_record_id,
  63. current_user,
  64. case when tg_op in ('UPDATE', 'DELETE') then to_jsonb(old) else null end,
  65. case when tg_op in ('INSERT', 'UPDATE') then to_jsonb(new) else null end
  66. );
  67. if tg_op = 'DELETE' then
  68. return old;
  69. end if;
  70. return new;
  71. end;
  72. $$;
  73. ALTER FUNCTION akulova_vs.fn_audit_log_changes() OWNER TO akulova_vs;
  74. --
  75. -- TOC entry 1772 (class 1255 OID 450327)
  76. -- Name: fn_authenticate_user(text, text); Type: FUNCTION; Schema: akulova_vs; Owner: akulova_vs
  77. --
  78. CREATE FUNCTION akulova_vs.fn_authenticate_user(p_login text, p_password text) RETURNS TABLE(user_id integer, login character varying, role text, instructor_id integer, driver_id integer)
  79. LANGUAGE sql STABLE
  80. AS $$
  81. select
  82. au.user_id,
  83. au.login,
  84. au.role::text,
  85. au.instructor_id,
  86. au.driver_id
  87. from akulova_vs.app_users au
  88. where au.login = p_login
  89. and au.password_hash = public.crypt(p_password, au.password_hash)
  90. and au.is_active = true
  91. limit 1;
  92. $$;
  93. ALTER FUNCTION akulova_vs.fn_authenticate_user(p_login text, p_password text) OWNER TO akulova_vs;
  94. --
  95. -- TOC entry 1753 (class 1255 OID 448456)
  96. -- Name: fn_hash_password(text); Type: FUNCTION; Schema: akulova_vs; Owner: akulova_vs
  97. --
  98. CREATE FUNCTION akulova_vs.fn_hash_password(p_password text) RETURNS text
  99. LANGUAGE sql
  100. AS $$
  101. select public.crypt(p_password, public.gen_salt('bf'));
  102. $$;
  103. ALTER FUNCTION akulova_vs.fn_hash_password(p_password text) OWNER TO akulova_vs;
  104. SET default_tablespace = '';
  105. SET default_table_access_method = heap;
  106. --
  107. -- TOC entry 614 (class 1259 OID 448321)
  108. -- Name: app_users; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  109. --
  110. CREATE TABLE akulova_vs.app_users (
  111. user_id integer NOT NULL,
  112. login character varying(80) NOT NULL,
  113. password_hash text NOT NULL,
  114. role akulova_vs.app_role NOT NULL,
  115. is_active boolean DEFAULT true NOT NULL,
  116. instructor_id integer,
  117. driver_id integer,
  118. CONSTRAINT chk_app_users_user_has_driver CHECK ((((role = 'admin'::akulova_vs.app_role) AND (driver_id IS NULL)) OR ((role = 'user'::akulova_vs.app_role) AND (driver_id IS NOT NULL))))
  119. );
  120. ALTER TABLE akulova_vs.app_users OWNER TO akulova_vs;
  121. --
  122. -- TOC entry 613 (class 1259 OID 448320)
  123. -- Name: app_users_user_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  124. --
  125. ALTER TABLE akulova_vs.app_users ALTER COLUMN user_id ADD GENERATED BY DEFAULT AS IDENTITY (
  126. SEQUENCE NAME akulova_vs.app_users_user_id_seq
  127. START WITH 1
  128. INCREMENT BY 1
  129. NO MINVALUE
  130. NO MAXVALUE
  131. CACHE 1
  132. );
  133. --
  134. -- TOC entry 1003 (class 1259 OID 454349)
  135. -- Name: audit_log; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  136. --
  137. CREATE TABLE akulova_vs.audit_log (
  138. log_id integer NOT NULL,
  139. table_name character varying(80) NOT NULL,
  140. operation character varying(10) NOT NULL,
  141. record_id integer,
  142. changed_at timestamp without time zone DEFAULT now() NOT NULL,
  143. changed_by character varying(80) DEFAULT CURRENT_USER NOT NULL,
  144. old_data jsonb,
  145. new_data jsonb,
  146. CONSTRAINT audit_log_operation_check CHECK (((operation)::text = ANY ((ARRAY['INSERT'::character varying, 'UPDATE'::character varying, 'DELETE'::character varying])::text[])))
  147. );
  148. ALTER TABLE akulova_vs.audit_log OWNER TO akulova_vs;
  149. --
  150. -- TOC entry 1002 (class 1259 OID 454348)
  151. -- Name: audit_log_log_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  152. --
  153. ALTER TABLE akulova_vs.audit_log ALTER COLUMN log_id ADD GENERATED BY DEFAULT AS IDENTITY (
  154. SEQUENCE NAME akulova_vs.audit_log_log_id_seq
  155. START WITH 1
  156. INCREMENT BY 1
  157. NO MINVALUE
  158. NO MAXVALUE
  159. CACHE 1
  160. );
  161. --
  162. -- TOC entry 616 (class 1259 OID 448344)
  163. -- Name: drivers; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  164. --
  165. CREATE TABLE akulova_vs.drivers (
  166. driver_id integer NOT NULL,
  167. school_id integer NOT NULL,
  168. last_name character varying(80) NOT NULL,
  169. first_name character varying(80) NOT NULL,
  170. middle_name character varying(80),
  171. birth_date date NOT NULL,
  172. phone character varying(20),
  173. CONSTRAINT chk_drivers_birth_date_min_age CHECK ((birth_date <= ((CURRENT_DATE - '16 years'::interval))::date)),
  174. CONSTRAINT chk_drivers_phone_format CHECK (((phone IS NULL) OR ((phone)::text ~ '^\+?[0-9 ()-]{5,25}$'::text)))
  175. );
  176. ALTER TABLE akulova_vs.drivers OWNER TO akulova_vs;
  177. --
  178. -- TOC entry 615 (class 1259 OID 448343)
  179. -- Name: drivers_driver_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  180. --
  181. ALTER TABLE akulova_vs.drivers ALTER COLUMN driver_id ADD GENERATED BY DEFAULT AS IDENTITY (
  182. SEQUENCE NAME akulova_vs.drivers_driver_id_seq
  183. START WITH 1
  184. INCREMENT BY 1
  185. NO MINVALUE
  186. NO MAXVALUE
  187. CACHE 1
  188. );
  189. --
  190. -- TOC entry 610 (class 1259 OID 448294)
  191. -- Name: driving_schools; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  192. --
  193. CREATE TABLE akulova_vs.driving_schools (
  194. school_id integer NOT NULL,
  195. school_name character varying(150) NOT NULL,
  196. address text NOT NULL,
  197. phone character varying(20),
  198. CONSTRAINT chk_schools_phone_format CHECK (((phone IS NULL) OR ((phone)::text ~ '^\+?[0-9 ()-]{5,25}$'::text)))
  199. );
  200. ALTER TABLE akulova_vs.driving_schools OWNER TO akulova_vs;
  201. --
  202. -- TOC entry 609 (class 1259 OID 448293)
  203. -- Name: driving_schools_school_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  204. --
  205. ALTER TABLE akulova_vs.driving_schools ALTER COLUMN school_id ADD GENERATED BY DEFAULT AS IDENTITY (
  206. SEQUENCE NAME akulova_vs.driving_schools_school_id_seq
  207. START WITH 1
  208. INCREMENT BY 1
  209. NO MINVALUE
  210. NO MAXVALUE
  211. CACHE 1
  212. );
  213. --
  214. -- TOC entry 618 (class 1259 OID 448360)
  215. -- Name: exam_routes; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  216. --
  217. CREATE TABLE akulova_vs.exam_routes (
  218. route_id integer NOT NULL,
  219. route_name character varying(120) NOT NULL,
  220. start_address text NOT NULL,
  221. end_address text NOT NULL,
  222. difficulty character varying(30) NOT NULL,
  223. CONSTRAINT chk_exam_routes_difficulty CHECK (((difficulty)::text = ANY ((ARRAY['легкий'::character varying, 'средний'::character varying, 'сложный'::character varying])::text[])))
  224. );
  225. ALTER TABLE akulova_vs.exam_routes OWNER TO akulova_vs;
  226. --
  227. -- TOC entry 617 (class 1259 OID 448359)
  228. -- Name: exam_routes_route_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  229. --
  230. ALTER TABLE akulova_vs.exam_routes ALTER COLUMN route_id ADD GENERATED BY DEFAULT AS IDENTITY (
  231. SEQUENCE NAME akulova_vs.exam_routes_route_id_seq
  232. START WITH 1
  233. INCREMENT BY 1
  234. NO MINVALUE
  235. NO MAXVALUE
  236. CACHE 1
  237. );
  238. --
  239. -- TOC entry 624 (class 1259 OID 448393)
  240. -- Name: exams; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  241. --
  242. CREATE TABLE akulova_vs.exams (
  243. exam_id integer NOT NULL,
  244. driver_id integer NOT NULL,
  245. route_id integer NOT NULL,
  246. inspector_id integer NOT NULL,
  247. exam_date date NOT NULL,
  248. result character varying(20) NOT NULL,
  249. CONSTRAINT chk_exams_result CHECK (((result)::text = ANY ((ARRAY['сдан'::character varying, 'не сдан'::character varying])::text[])))
  250. );
  251. ALTER TABLE akulova_vs.exams OWNER TO akulova_vs;
  252. --
  253. -- TOC entry 623 (class 1259 OID 448392)
  254. -- Name: exams_exam_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  255. --
  256. ALTER TABLE akulova_vs.exams ALTER COLUMN exam_id ADD GENERATED BY DEFAULT AS IDENTITY (
  257. SEQUENCE NAME akulova_vs.exams_exam_id_seq
  258. START WITH 1
  259. INCREMENT BY 1
  260. NO MINVALUE
  261. NO MAXVALUE
  262. CACHE 1
  263. );
  264. --
  265. -- TOC entry 612 (class 1259 OID 448305)
  266. -- Name: instructors; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  267. --
  268. CREATE TABLE akulova_vs.instructors (
  269. instructor_id integer NOT NULL,
  270. school_id integer NOT NULL,
  271. last_name character varying(80) NOT NULL,
  272. first_name character varying(80) NOT NULL,
  273. middle_name character varying(80),
  274. phone character varying(20),
  275. license_number character varying(30) NOT NULL,
  276. CONSTRAINT chk_instructors_phone_format CHECK (((phone IS NULL) OR ((phone)::text ~ '^\+?[0-9 ()-]{5,25}$'::text)))
  277. );
  278. ALTER TABLE akulova_vs.instructors OWNER TO akulova_vs;
  279. --
  280. -- TOC entry 611 (class 1259 OID 448304)
  281. -- Name: instructors_instructor_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  282. --
  283. ALTER TABLE akulova_vs.instructors ALTER COLUMN instructor_id ADD GENERATED BY DEFAULT AS IDENTITY (
  284. SEQUENCE NAME akulova_vs.instructors_instructor_id_seq
  285. START WITH 1
  286. INCREMENT BY 1
  287. NO MINVALUE
  288. NO MAXVALUE
  289. CACHE 1
  290. );
  291. --
  292. -- TOC entry 626 (class 1259 OID 448420)
  293. -- Name: licenses; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  294. --
  295. CREATE TABLE akulova_vs.licenses (
  296. license_id integer NOT NULL,
  297. driver_id integer NOT NULL,
  298. officer_id integer NOT NULL,
  299. issue_date date NOT NULL,
  300. category character varying(10) NOT NULL,
  301. license_number character varying(30) NOT NULL,
  302. CONSTRAINT chk_licenses_category CHECK (((category)::text = ANY ((ARRAY['A'::character varying, 'B'::character varying, 'C'::character varying, 'D'::character varying, 'BE'::character varying, 'CE'::character varying, 'DE'::character varying])::text[])))
  303. );
  304. ALTER TABLE akulova_vs.licenses OWNER TO akulova_vs;
  305. --
  306. -- TOC entry 625 (class 1259 OID 448419)
  307. -- Name: licenses_license_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  308. --
  309. ALTER TABLE akulova_vs.licenses ALTER COLUMN license_id ADD GENERATED BY DEFAULT AS IDENTITY (
  310. SEQUENCE NAME akulova_vs.licenses_license_id_seq
  311. START WITH 1
  312. INCREMENT BY 1
  313. NO MINVALUE
  314. NO MAXVALUE
  315. CACHE 1
  316. );
  317. --
  318. -- TOC entry 620 (class 1259 OID 448373)
  319. -- Name: traffic_inspectors; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  320. --
  321. CREATE TABLE akulova_vs.traffic_inspectors (
  322. inspector_id integer NOT NULL,
  323. last_name character varying(80) NOT NULL,
  324. first_name character varying(80) NOT NULL,
  325. middle_name character varying(80),
  326. rank_name character varying(80) NOT NULL
  327. );
  328. ALTER TABLE akulova_vs.traffic_inspectors OWNER TO akulova_vs;
  329. --
  330. -- TOC entry 619 (class 1259 OID 448372)
  331. -- Name: traffic_inspectors_inspector_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  332. --
  333. ALTER TABLE akulova_vs.traffic_inspectors ALTER COLUMN inspector_id ADD GENERATED BY DEFAULT AS IDENTITY (
  334. SEQUENCE NAME akulova_vs.traffic_inspectors_inspector_id_seq
  335. START WITH 1
  336. INCREMENT BY 1
  337. NO MINVALUE
  338. NO MAXVALUE
  339. CACHE 1
  340. );
  341. --
  342. -- TOC entry 622 (class 1259 OID 448383)
  343. -- Name: traffic_officers; Type: TABLE; Schema: akulova_vs; Owner: akulova_vs
  344. --
  345. CREATE TABLE akulova_vs.traffic_officers (
  346. officer_id integer NOT NULL,
  347. last_name character varying(80) NOT NULL,
  348. first_name character varying(80) NOT NULL,
  349. middle_name character varying(80),
  350. position_name character varying(120) NOT NULL
  351. );
  352. ALTER TABLE akulova_vs.traffic_officers OWNER TO akulova_vs;
  353. --
  354. -- TOC entry 621 (class 1259 OID 448382)
  355. -- Name: traffic_officers_officer_id_seq; Type: SEQUENCE; Schema: akulova_vs; Owner: akulova_vs
  356. --
  357. ALTER TABLE akulova_vs.traffic_officers ALTER COLUMN officer_id ADD GENERATED BY DEFAULT AS IDENTITY (
  358. SEQUENCE NAME akulova_vs.traffic_officers_officer_id_seq
  359. START WITH 1
  360. INCREMENT BY 1
  361. NO MINVALUE
  362. NO MAXVALUE
  363. CACHE 1
  364. );
  365. --
  366. -- TOC entry 1001 (class 1259 OID 454343)
  367. -- Name: v_exam_search; Type: VIEW; Schema: akulova_vs; Owner: akulova_vs
  368. --
  369. CREATE VIEW akulova_vs.v_exam_search AS
  370. SELECT e.exam_id,
  371. e.exam_date,
  372. e.result,
  373. concat_ws(' '::text, d.last_name, d.first_name, d.middle_name) AS driver_full_name,
  374. ds.school_name,
  375. er.route_name,
  376. concat_ws(' '::text, ti.last_name, ti.first_name, ti.middle_name) AS inspector_full_name,
  377. (row_number() OVER (PARTITION BY e.driver_id ORDER BY e.exam_date, e.exam_id))::integer AS attempt_number,
  378. (EXTRACT(year FROM age((e.exam_date)::timestamp with time zone, (d.birth_date)::timestamp with time zone)))::integer AS driver_age
  379. FROM ((((akulova_vs.exams e
  380. JOIN akulova_vs.drivers d ON ((d.driver_id = e.driver_id)))
  381. JOIN akulova_vs.driving_schools ds ON ((ds.school_id = d.school_id)))
  382. JOIN akulova_vs.exam_routes er ON ((er.route_id = e.route_id)))
  383. JOIN akulova_vs.traffic_inspectors ti ON ((ti.inspector_id = e.inspector_id)));
  384. ALTER VIEW akulova_vs.v_exam_search OWNER TO akulova_vs;
  385. --
  386. -- TOC entry 6227 (class 0 OID 448321)
  387. -- Dependencies: 614
  388. -- Data for Name: app_users; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  389. --
  390. COPY akulova_vs.app_users (user_id, login, password_hash, role, is_active, instructor_id, driver_id) FROM stdin;
  391. 1 admin $1$adm2026$f/c1i.QLTZq9f0yi58hF./ admin t 1 \N
  392. 2 user $1$usr2026$TH.zVKjQW4ADmsUOkhAi01 user t \N 1
  393. 3 ivanov $1$ivanov26$RIsEw0mN69yf0AIDaIl/x0 user t \N 2
  394. 4 smirnova $1$smirn26$AXwttYrGMEPAdMwyF7JGF/ user t \N 3
  395. 5 kuzmin $1$kuzmin26$qc4zcHQl0zHs/XEZp1JfN/ user t \N 4
  396. 6 volkova $1$volkov26$QVaboMFeUPclfBgauZxuE/ user t \N 5
  397. \.
  398. --
  399. -- TOC entry 6241 (class 0 OID 454349)
  400. -- Dependencies: 1003
  401. -- Data for Name: audit_log; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  402. --
  403. COPY akulova_vs.audit_log (log_id, table_name, operation, record_id, changed_at, changed_by, old_data, new_data) FROM stdin;
  404. 3 traffic_officers DELETE 7 2026-06-02 15:45:20.119893 admin {"last_name": "Иванов", "first_name": "Иван", "officer_id": 7, "middle_name": "Иванович", "position_name": "специалист по выдаче удостоверений"} \N
  405. 1 traffic_officers INSERT 6 2026-06-02 15:11:15.206198 admin \N {"last_name": "Непоткупнов", "first_name": "Константин", "officer_id": 6, "middle_name": "Сергеевич", "position_name": "специалист по выдаче удостоверений"}
  406. 2 traffic_officers INSERT 7 2026-06-02 15:38:00.496125 admin \N {"last_name": "Иванов", "first_name": "Иван", "officer_id": 7, "middle_name": "Иванович", "position_name": "специалист по выдаче удостоверений"}
  407. 4 driving_schools INSERT 6 2026-06-02 16:54:29.853262 akulova_vs \N {"phone": "+ 7 8162 80-90-10", "address": "ул Гагарина, 37A", "school_id": 6, "school_name": "Автошкола Шанс"}
  408. 5 driving_schools UPDATE 6 2026-06-02 16:54:39.890178 akulova_vs {"phone": "+ 7 8162 80-90-10", "address": "ул Гагарина, 37A", "school_id": 6, "school_name": "Автошкола Шанс"} {"phone": "+ 7 8162 80-90-20", "address": "ул Гагарина, 37A", "school_id": 6, "school_name": "Автошкола Шанс"}
  409. 6 driving_schools DELETE 6 2026-06-02 16:54:45.676122 akulova_vs {"phone": "+ 7 8162 80-90-20", "address": "ул Гагарина, 37A", "school_id": 6, "school_name": "Автошкола Шанс"} \N
  410. 7 instructors INSERT 9 2026-06-02 16:56:11.176451 akulova_vs \N {"phone": "+7 900 999-99-99", "last_name": "Т", "school_id": 4, "first_name": "Т", "middle_name": "Т", "instructor_id": 9, "license_number": "INS-009"}
  411. 8 instructors UPDATE 9 2026-06-02 16:56:16.350856 akulova_vs {"phone": "+7 900 999-99-99", "last_name": "Т", "school_id": 4, "first_name": "Т", "middle_name": "Т", "instructor_id": 9, "license_number": "INS-009"} {"phone": "+7 900 999-99-99", "last_name": "Т", "school_id": 4, "first_name": "ТE", "middle_name": "Т", "instructor_id": 9, "license_number": "INS-009"}
  412. 9 instructors DELETE 9 2026-06-02 16:56:19.916324 akulova_vs {"phone": "+7 900 999-99-99", "last_name": "Т", "school_id": 4, "first_name": "ТE", "middle_name": "Т", "instructor_id": 9, "license_number": "INS-009"} \N
  413. 10 drivers INSERT 11 2026-06-02 16:57:11.182215 akulova_vs \N {"phone": "+ 7 900 600 45 45", "driver_id": 11, "last_name": "n", "school_id": 2, "birth_date": "2007-05-04", "first_name": "n", "middle_name": null}
  414. 11 drivers DELETE 11 2026-06-02 16:57:24.148653 akulova_vs {"phone": "+ 7 900 600 45 45", "driver_id": 11, "last_name": "n", "school_id": 2, "birth_date": "2007-05-04", "first_name": "n", "middle_name": null} \N
  415. 12 drivers UPDATE 6 2026-06-02 16:57:46.715882 akulova_vs {"phone": "+7 900 999-00-11", "driver_id": 6, "last_name": "Морозова", "school_id": 5, "birth_date": "2003-01-25", "first_name": "Дарья", "middle_name": "Алексеевна"} {"phone": "+7 900 999-00-11", "driver_id": 6, "last_name": "Морозова", "school_id": 5, "birth_date": "2007-01-25", "first_name": "Дарья", "middle_name": "Алексеевна"}
  416. 13 traffic_inspectors UPDATE 1 2026-06-02 16:58:01.520372 akulova_vs {"last_name": "Морозов", "rank_name": "старший лейтенант", "first_name": "Павел", "middle_name": "Сергеевич", "inspector_id": 1} {"last_name": "Морозов", "rank_name": "майор", "first_name": "Павел", "middle_name": "Сергеевич", "inspector_id": 1}
  417. 14 traffic_inspectors UPDATE 1 2026-06-02 17:08:03.177358 admin {"last_name": "Морозов", "rank_name": "майор", "first_name": "Павел", "middle_name": "Сергеевич", "inspector_id": 1} {"last_name": "Морозов", "rank_name": "старший лейтенант", "first_name": "Павел", "middle_name": "Сергеевич", "inspector_id": 1}
  418. \.
  419. --
  420. -- TOC entry 6229 (class 0 OID 448344)
  421. -- Dependencies: 616
  422. -- Data for Name: drivers; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  423. --
  424. COPY akulova_vs.drivers (driver_id, school_id, last_name, first_name, middle_name, birth_date, phone) FROM stdin;
  425. 1 1 Петров Илья Андреевич 2001-05-20 +7 900 444-44-44
  426. 2 2 Иванов Сергей Петрович 2000-11-14 +7 900 555-55-55
  427. 3 3 Смирнова Анна Олеговна 1999-03-08 +7 900 666-66-66
  428. 4 1 Кузьмин Даниил Романович 2002-07-12 +7 900 777-77-77
  429. 5 4 Волкова Екатерина Ильинична 2001-12-02 +7 900 888-88-88
  430. 7 2 Лебедев Максим Викторович 1998-09-17 +7 901 111-22-33
  431. 8 3 Семенова Полина Дмитриевна 2004-04-10 +7 901 222-33-44
  432. 9 4 Зайцев Никита Павлович 2000-06-30 +7 901 333-44-55
  433. 10 5 Андреева Алина Сергеевна 2002-10-05 +7 901 444-55-66
  434. 6 5 Морозова Дарья Алексеевна 2007-01-25 +7 900 999-00-11
  435. \.
  436. --
  437. -- TOC entry 6223 (class 0 OID 448294)
  438. -- Dependencies: 610
  439. -- Data for Name: driving_schools; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  440. --
  441. COPY akulova_vs.driving_schools (school_id, school_name, address, phone) FROM stdin;
  442. 1 Автошкола Старт ул. Большая Московская, 12 +7 8162 10-20-30
  443. 2 Автошкола Вектор ул. Псковская, 25 +7 8162 20-30-40
  444. 3 Автошкола Драйв пр-т Мира, 8 +7 8162 30-40-50
  445. 4 Автошкола Профи ул. Ломоносова, 18 +7 8162 40-50-60
  446. 5 Автошкола Магистраль ул. Кочетова, 31 +7 8162 50-60-70
  447. \.
  448. --
  449. -- TOC entry 6231 (class 0 OID 448360)
  450. -- Dependencies: 618
  451. -- Data for Name: exam_routes; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  452. --
  453. COPY akulova_vs.exam_routes (route_id, route_name, start_address, end_address, difficulty) FROM stdin;
  454. 1 Маршрут №1 - центр ул. Большая Московская, 12 Сенная площадь легкий
  455. 2 Маршрут №2 - город ул. Псковская, 25 Воскресенский бульвар средний
  456. 3 Маршрут №3 - сложный пр-т Мира, 8 ул. Кочетова, 30 сложный
  457. 4 Маршрут №4 - учебная площадка ул. Ломоносова, 18 ул. Нехинская, 57 легкий
  458. 5 Маршрут №5 - кольцевая развязка ул. Кочетова, 31 пр-т Александра Корсунова, 14 средний
  459. \.
  460. --
  461. -- TOC entry 6237 (class 0 OID 448393)
  462. -- Dependencies: 624
  463. -- Data for Name: exams; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  464. --
  465. COPY akulova_vs.exams (exam_id, driver_id, route_id, inspector_id, exam_date, result) FROM stdin;
  466. 2 2 2 2 2026-05-21 не сдан
  467. 3 3 3 3 2026-05-22 сдан
  468. 4 4 4 4 2026-05-23 не сдан
  469. 5 5 5 5 2026-05-24 сдан
  470. 6 6 1 2 2026-05-25 сдан
  471. 7 7 2 3 2026-05-26 не сдан
  472. 8 8 3 4 2026-05-27 сдан
  473. 9 9 4 5 2026-05-28 сдан
  474. 10 10 5 1 2026-05-29 не сдан
  475. 11 2 2 2 2026-06-05 сдан
  476. 12 4 4 4 2026-06-06 сдан
  477. 1 1 1 1 2026-05-20 сдан
  478. \.
  479. --
  480. -- TOC entry 6225 (class 0 OID 448305)
  481. -- Dependencies: 612
  482. -- Data for Name: instructors; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  483. --
  484. COPY akulova_vs.instructors (instructor_id, school_id, last_name, first_name, middle_name, phone, license_number) FROM stdin;
  485. 1 1 Соколов Алексей Игоревич +7 900 111-11-11 INS-001
  486. 2 2 Кузнецова Марина Олеговна +7 900 222-22-22 INS-002
  487. 3 3 Орлов Дмитрий Павлович +7 900 333-33-33 INS-003
  488. 4 1 Николаев Артём Сергеевич +7 900 444-11-22 INS-004
  489. 5 4 Федорова Ирина Владимировна +7 900 555-22-33 INS-005
  490. 6 5 Григорьев Павел Андреевич +7 900 666-33-44 INS-006
  491. 7 2 Мельникова Ольга Петровна +7 900 777-44-55 INS-007
  492. 8 3 Белов Кирилл Олегович +7 900 888-55-66 INS-008
  493. \.
  494. --
  495. -- TOC entry 6239 (class 0 OID 448420)
  496. -- Dependencies: 626
  497. -- Data for Name: licenses; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  498. --
  499. COPY akulova_vs.licenses (license_id, driver_id, officer_id, issue_date, category, license_number) FROM stdin;
  500. 1 1 1 2026-05-21 B VU-2026-0001
  501. 2 3 3 2026-05-23 B VU-2026-0002
  502. 3 5 5 2026-05-25 B VU-2026-0003
  503. 4 6 2 2026-05-26 C VU-2026-0004
  504. 5 8 4 2026-05-28 B VU-2026-0005
  505. 6 9 5 2026-05-29 A VU-2026-0006
  506. 7 2 2 2026-06-06 B VU-2026-0007
  507. 8 4 4 2026-06-07 B VU-2026-0008
  508. \.
  509. --
  510. -- TOC entry 6233 (class 0 OID 448373)
  511. -- Dependencies: 620
  512. -- Data for Name: traffic_inspectors; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  513. --
  514. COPY akulova_vs.traffic_inspectors (inspector_id, last_name, first_name, middle_name, rank_name) FROM stdin;
  515. 2 Васильева Елена Александровна капитан
  516. 3 Никитин Роман Игоревич майор
  517. 4 Савельев Олег Владимирович лейтенант
  518. 5 Крылова Наталья Павловна подполковник
  519. 1 Морозов Павел Сергеевич старший лейтенант
  520. \.
  521. --
  522. -- TOC entry 6235 (class 0 OID 448383)
  523. -- Dependencies: 622
  524. -- Data for Name: traffic_officers; Type: TABLE DATA; Schema: akulova_vs; Owner: akulova_vs
  525. --
  526. COPY akulova_vs.traffic_officers (officer_id, last_name, first_name, middle_name, position_name) FROM stdin;
  527. 1 Фёдоров Андрей Викторович инспектор регистрационно-экзаменационного отдела
  528. 2 Белова Ольга Дмитриевна старший инспектор
  529. 3 Громов Николай Петрович специалист по выдаче удостоверений
  530. 4 Соколова Мария Игоревна инспектор регистрационно-экзаменационного отдела
  531. 5 Егоров Владислав Андреевич старший инспектор
  532. 6 Непоткупнов Константин Сергеевич специалист по выдаче удостоверений
  533. \.
  534. --
  535. -- TOC entry 6247 (class 0 OID 0)
  536. -- Dependencies: 613
  537. -- Name: app_users_user_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  538. --
  539. SELECT pg_catalog.setval('akulova_vs.app_users_user_id_seq', 6, true);
  540. --
  541. -- TOC entry 6248 (class 0 OID 0)
  542. -- Dependencies: 1002
  543. -- Name: audit_log_log_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  544. --
  545. SELECT pg_catalog.setval('akulova_vs.audit_log_log_id_seq', 14, true);
  546. --
  547. -- TOC entry 6249 (class 0 OID 0)
  548. -- Dependencies: 615
  549. -- Name: drivers_driver_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  550. --
  551. SELECT pg_catalog.setval('akulova_vs.drivers_driver_id_seq', 11, true);
  552. --
  553. -- TOC entry 6250 (class 0 OID 0)
  554. -- Dependencies: 609
  555. -- Name: driving_schools_school_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  556. --
  557. SELECT pg_catalog.setval('akulova_vs.driving_schools_school_id_seq', 6, true);
  558. --
  559. -- TOC entry 6251 (class 0 OID 0)
  560. -- Dependencies: 617
  561. -- Name: exam_routes_route_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  562. --
  563. SELECT pg_catalog.setval('akulova_vs.exam_routes_route_id_seq', 5, true);
  564. --
  565. -- TOC entry 6252 (class 0 OID 0)
  566. -- Dependencies: 623
  567. -- Name: exams_exam_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  568. --
  569. SELECT pg_catalog.setval('akulova_vs.exams_exam_id_seq', 12, true);
  570. --
  571. -- TOC entry 6253 (class 0 OID 0)
  572. -- Dependencies: 611
  573. -- Name: instructors_instructor_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  574. --
  575. SELECT pg_catalog.setval('akulova_vs.instructors_instructor_id_seq', 9, true);
  576. --
  577. -- TOC entry 6254 (class 0 OID 0)
  578. -- Dependencies: 625
  579. -- Name: licenses_license_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  580. --
  581. SELECT pg_catalog.setval('akulova_vs.licenses_license_id_seq', 8, true);
  582. --
  583. -- TOC entry 6255 (class 0 OID 0)
  584. -- Dependencies: 619
  585. -- Name: traffic_inspectors_inspector_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  586. --
  587. SELECT pg_catalog.setval('akulova_vs.traffic_inspectors_inspector_id_seq', 5, true);
  588. --
  589. -- TOC entry 6256 (class 0 OID 0)
  590. -- Dependencies: 621
  591. -- Name: traffic_officers_officer_id_seq; Type: SEQUENCE SET; Schema: akulova_vs; Owner: akulova_vs
  592. --
  593. SELECT pg_catalog.setval('akulova_vs.traffic_officers_officer_id_seq', 7, true);
  594. --
  595. -- TOC entry 5963 (class 2606 OID 450092)
  596. -- Name: app_users app_users_driver_id_key; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  597. --
  598. ALTER TABLE ONLY akulova_vs.app_users
  599. ADD CONSTRAINT app_users_driver_id_key UNIQUE (driver_id);
  600. --
  601. -- TOC entry 5965 (class 2606 OID 448337)
  602. -- Name: app_users app_users_instructor_id_key; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  603. --
  604. ALTER TABLE ONLY akulova_vs.app_users
  605. ADD CONSTRAINT app_users_instructor_id_key UNIQUE (instructor_id);
  606. --
  607. -- TOC entry 5967 (class 2606 OID 448335)
  608. -- Name: app_users app_users_login_key; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  609. --
  610. ALTER TABLE ONLY akulova_vs.app_users
  611. ADD CONSTRAINT app_users_login_key UNIQUE (login);
  612. --
  613. -- TOC entry 5969 (class 2606 OID 448333)
  614. -- Name: app_users app_users_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  615. --
  616. ALTER TABLE ONLY akulova_vs.app_users
  617. ADD CONSTRAINT app_users_pkey PRIMARY KEY (user_id);
  618. --
  619. -- TOC entry 5985 (class 2606 OID 454363)
  620. -- Name: audit_log audit_log_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  621. --
  622. ALTER TABLE ONLY akulova_vs.audit_log
  623. ADD CONSTRAINT audit_log_pkey PRIMARY KEY (log_id);
  624. --
  625. -- TOC entry 5971 (class 2606 OID 448353)
  626. -- Name: drivers drivers_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  627. --
  628. ALTER TABLE ONLY akulova_vs.drivers
  629. ADD CONSTRAINT drivers_pkey PRIMARY KEY (driver_id);
  630. --
  631. -- TOC entry 5957 (class 2606 OID 448303)
  632. -- Name: driving_schools driving_schools_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  633. --
  634. ALTER TABLE ONLY akulova_vs.driving_schools
  635. ADD CONSTRAINT driving_schools_pkey PRIMARY KEY (school_id);
  636. --
  637. -- TOC entry 5973 (class 2606 OID 448371)
  638. -- Name: exam_routes exam_routes_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  639. --
  640. ALTER TABLE ONLY akulova_vs.exam_routes
  641. ADD CONSTRAINT exam_routes_pkey PRIMARY KEY (route_id);
  642. --
  643. -- TOC entry 5979 (class 2606 OID 448403)
  644. -- Name: exams exams_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  645. --
  646. ALTER TABLE ONLY akulova_vs.exams
  647. ADD CONSTRAINT exams_pkey PRIMARY KEY (exam_id);
  648. --
  649. -- TOC entry 5959 (class 2606 OID 448314)
  650. -- Name: instructors instructors_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  651. --
  652. ALTER TABLE ONLY akulova_vs.instructors
  653. ADD CONSTRAINT instructors_pkey PRIMARY KEY (instructor_id);
  654. --
  655. -- TOC entry 5981 (class 2606 OID 448430)
  656. -- Name: licenses licenses_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  657. --
  658. ALTER TABLE ONLY akulova_vs.licenses
  659. ADD CONSTRAINT licenses_pkey PRIMARY KEY (license_id);
  660. --
  661. -- TOC entry 5975 (class 2606 OID 448381)
  662. -- Name: traffic_inspectors traffic_inspectors_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  663. --
  664. ALTER TABLE ONLY akulova_vs.traffic_inspectors
  665. ADD CONSTRAINT traffic_inspectors_pkey PRIMARY KEY (inspector_id);
  666. --
  667. -- TOC entry 5977 (class 2606 OID 448391)
  668. -- Name: traffic_officers traffic_officers_pkey; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  669. --
  670. ALTER TABLE ONLY akulova_vs.traffic_officers
  671. ADD CONSTRAINT traffic_officers_pkey PRIMARY KEY (officer_id);
  672. --
  673. -- TOC entry 5961 (class 2606 OID 454339)
  674. -- Name: instructors uq_instructors_license_number; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  675. --
  676. ALTER TABLE ONLY akulova_vs.instructors
  677. ADD CONSTRAINT uq_instructors_license_number UNIQUE (license_number);
  678. --
  679. -- TOC entry 5983 (class 2606 OID 454341)
  680. -- Name: licenses uq_licenses_license_number; Type: CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  681. --
  682. ALTER TABLE ONLY akulova_vs.licenses
  683. ADD CONSTRAINT uq_licenses_license_number UNIQUE (license_number);
  684. --
  685. -- TOC entry 5997 (class 2620 OID 454377)
  686. -- Name: app_users trg_audit_app_users; Type: TRIGGER; Schema: akulova_vs; Owner: akulova_vs
  687. --
  688. CREATE TRIGGER trg_audit_app_users AFTER INSERT OR DELETE OR UPDATE ON akulova_vs.app_users FOR EACH ROW EXECUTE FUNCTION akulova_vs.fn_audit_log_changes('user_id');
  689. --
  690. -- TOC entry 5998 (class 2620 OID 454371)
  691. -- Name: drivers trg_audit_drivers; Type: TRIGGER; Schema: akulova_vs; Owner: akulova_vs
  692. --
  693. CREATE TRIGGER trg_audit_drivers AFTER INSERT OR DELETE OR UPDATE ON akulova_vs.drivers FOR EACH ROW EXECUTE FUNCTION akulova_vs.fn_audit_log_changes('driver_id');
  694. --
  695. -- TOC entry 5995 (class 2620 OID 454369)
  696. -- Name: driving_schools trg_audit_driving_schools; Type: TRIGGER; Schema: akulova_vs; Owner: akulova_vs
  697. --
  698. CREATE TRIGGER trg_audit_driving_schools AFTER INSERT OR DELETE OR UPDATE ON akulova_vs.driving_schools FOR EACH ROW EXECUTE FUNCTION akulova_vs.fn_audit_log_changes('school_id');
  699. --
  700. -- TOC entry 5999 (class 2620 OID 454372)
  701. -- Name: exam_routes trg_audit_exam_routes; Type: TRIGGER; Schema: akulova_vs; Owner: akulova_vs
  702. --
  703. CREATE TRIGGER trg_audit_exam_routes AFTER INSERT OR DELETE OR UPDATE ON akulova_vs.exam_routes FOR EACH ROW EXECUTE FUNCTION akulova_vs.fn_audit_log_changes('route_id');
  704. --
  705. -- TOC entry 6002 (class 2620 OID 454375)
  706. -- Name: exams trg_audit_exams; Type: TRIGGER; Schema: akulova_vs; Owner: akulova_vs
  707. --
  708. CREATE TRIGGER trg_audit_exams AFTER INSERT OR DELETE OR UPDATE ON akulova_vs.exams FOR EACH ROW EXECUTE FUNCTION akulova_vs.fn_audit_log_changes('exam_id');
  709. --
  710. -- TOC entry 5996 (class 2620 OID 454370)
  711. -- Name: instructors trg_audit_instructors; Type: TRIGGER; Schema: akulova_vs; Owner: akulova_vs
  712. --
  713. CREATE TRIGGER trg_audit_instructors AFTER INSERT OR DELETE OR UPDATE ON akulova_vs.instructors FOR EACH ROW EXECUTE FUNCTION akulova_vs.fn_audit_log_changes('instructor_id');
  714. --
  715. -- TOC entry 6003 (class 2620 OID 454376)
  716. -- Name: licenses trg_audit_licenses; Type: TRIGGER; Schema: akulova_vs; Owner: akulova_vs
  717. --
  718. CREATE TRIGGER trg_audit_licenses AFTER INSERT OR DELETE OR UPDATE ON akulova_vs.licenses FOR EACH ROW EXECUTE FUNCTION akulova_vs.fn_audit_log_changes('license_id');
  719. --
  720. -- TOC entry 6000 (class 2620 OID 454373)
  721. -- Name: traffic_inspectors trg_audit_traffic_inspectors; Type: TRIGGER; Schema: akulova_vs; Owner: akulova_vs
  722. --
  723. CREATE TRIGGER trg_audit_traffic_inspectors AFTER INSERT OR DELETE OR UPDATE ON akulova_vs.traffic_inspectors FOR EACH ROW EXECUTE FUNCTION akulova_vs.fn_audit_log_changes('inspector_id');
  724. --
  725. -- TOC entry 6001 (class 2620 OID 454374)
  726. -- Name: traffic_officers trg_audit_traffic_officers; Type: TRIGGER; Schema: akulova_vs; Owner: akulova_vs
  727. --
  728. CREATE TRIGGER trg_audit_traffic_officers AFTER INSERT OR DELETE OR UPDATE ON akulova_vs.traffic_officers FOR EACH ROW EXECUTE FUNCTION akulova_vs.fn_audit_log_changes('officer_id');
  729. --
  730. -- TOC entry 5987 (class 2606 OID 450086)
  731. -- Name: app_users app_users_driver_id_fkey; Type: FK CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  732. --
  733. ALTER TABLE ONLY akulova_vs.app_users
  734. ADD CONSTRAINT app_users_driver_id_fkey FOREIGN KEY (driver_id) REFERENCES akulova_vs.drivers(driver_id) ON UPDATE CASCADE ON DELETE RESTRICT;
  735. --
  736. -- TOC entry 5988 (class 2606 OID 448338)
  737. -- Name: app_users app_users_instructor_id_fkey; Type: FK CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  738. --
  739. ALTER TABLE ONLY akulova_vs.app_users
  740. ADD CONSTRAINT app_users_instructor_id_fkey FOREIGN KEY (instructor_id) REFERENCES akulova_vs.instructors(instructor_id);
  741. --
  742. -- TOC entry 5989 (class 2606 OID 448354)
  743. -- Name: drivers drivers_school_id_fkey; Type: FK CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  744. --
  745. ALTER TABLE ONLY akulova_vs.drivers
  746. ADD CONSTRAINT drivers_school_id_fkey FOREIGN KEY (school_id) REFERENCES akulova_vs.driving_schools(school_id);
  747. --
  748. -- TOC entry 5990 (class 2606 OID 448404)
  749. -- Name: exams exams_driver_id_fkey; Type: FK CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  750. --
  751. ALTER TABLE ONLY akulova_vs.exams
  752. ADD CONSTRAINT exams_driver_id_fkey FOREIGN KEY (driver_id) REFERENCES akulova_vs.drivers(driver_id);
  753. --
  754. -- TOC entry 5991 (class 2606 OID 448414)
  755. -- Name: exams exams_inspector_id_fkey; Type: FK CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  756. --
  757. ALTER TABLE ONLY akulova_vs.exams
  758. ADD CONSTRAINT exams_inspector_id_fkey FOREIGN KEY (inspector_id) REFERENCES akulova_vs.traffic_inspectors(inspector_id);
  759. --
  760. -- TOC entry 5992 (class 2606 OID 448409)
  761. -- Name: exams exams_route_id_fkey; Type: FK CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  762. --
  763. ALTER TABLE ONLY akulova_vs.exams
  764. ADD CONSTRAINT exams_route_id_fkey FOREIGN KEY (route_id) REFERENCES akulova_vs.exam_routes(route_id);
  765. --
  766. -- TOC entry 5986 (class 2606 OID 448315)
  767. -- Name: instructors instructors_school_id_fkey; Type: FK CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  768. --
  769. ALTER TABLE ONLY akulova_vs.instructors
  770. ADD CONSTRAINT instructors_school_id_fkey FOREIGN KEY (school_id) REFERENCES akulova_vs.driving_schools(school_id);
  771. --
  772. -- TOC entry 5993 (class 2606 OID 448431)
  773. -- Name: licenses licenses_driver_id_fkey; Type: FK CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  774. --
  775. ALTER TABLE ONLY akulova_vs.licenses
  776. ADD CONSTRAINT licenses_driver_id_fkey FOREIGN KEY (driver_id) REFERENCES akulova_vs.drivers(driver_id);
  777. --
  778. -- TOC entry 5994 (class 2606 OID 448436)
  779. -- Name: licenses licenses_officer_id_fkey; Type: FK CONSTRAINT; Schema: akulova_vs; Owner: akulova_vs
  780. --
  781. ALTER TABLE ONLY akulova_vs.licenses
  782. ADD CONSTRAINT licenses_officer_id_fkey FOREIGN KEY (officer_id) REFERENCES akulova_vs.traffic_officers(officer_id);
  783. -- Completed on 2026-06-02 17:20:16
  784. --
  785. -- PostgreSQL database dump complete
  786. --
  787. \unrestrict wUhTUEtP7H3sZbn0Sj8yBWOgI7rW8eGIJqHJvYsaK1avC0CCtslcJ40NJgPs7Rm