computer_sales.sql 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210
  1. --
  2. -- PostgreSQL database dump
  3. --
  4. \restrict c7tibngenZ3JJspWyr31r6mzMatTJpD95OAdikTmKQcJiOj35naiZ8VfDYXrpQI
  5. -- Dumped from database version 18.0
  6. -- Dumped by pg_dump version 18.4
  7. -- Started on 2026-06-25 13:56:39 MSK
  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 43 (class 2615 OID 442848)
  21. -- Name: ryzhov_ka; Type: SCHEMA; Schema: -; Owner: ryzhov_ka
  22. --
  23. CREATE SCHEMA ryzhov_ka;
  24. ALTER SCHEMA ryzhov_ka OWNER TO ryzhov_ka;
  25. --
  26. -- TOC entry 3306 (class 1247 OID 451376)
  27. -- Name: app_role; Type: TYPE; Schema: ryzhov_ka; Owner: ryzhov_ka
  28. --
  29. CREATE TYPE ryzhov_ka.app_role AS ENUM (
  30. 'admin',
  31. 'user'
  32. );
  33. ALTER TYPE ryzhov_ka.app_role OWNER TO ryzhov_ka;
  34. --
  35. -- TOC entry 2885 (class 1247 OID 443137)
  36. -- Name: chn; Type: DOMAIN; Schema: ryzhov_ka; Owner: ryzhov_ka
  37. --
  38. CREATE DOMAIN ryzhov_ka.chn AS character varying NOT NULL;
  39. ALTER DOMAIN ryzhov_ka.chn OWNER TO ryzhov_ka;
  40. --
  41. -- TOC entry 1947 (class 1255 OID 454490)
  42. -- Name: fn_audit_log_changes(); Type: FUNCTION; Schema: ryzhov_ka; Owner: ryzhov_ka
  43. --
  44. CREATE FUNCTION ryzhov_ka.fn_audit_log_changes() RETURNS trigger
  45. LANGUAGE plpgsql
  46. AS $$
  47. declare
  48. v_record_id text;
  49. begin
  50. if tg_op = 'INSERT' then
  51. v_record_id := coalesce(
  52. to_jsonb(new)->>'warehouse_id',
  53. to_jsonb(new)->>'employee_id',
  54. to_jsonb(new)->>'employee_warehouse_id',
  55. to_jsonb(new)->>'customer_id',
  56. to_jsonb(new)->>'user_id',
  57. to_jsonb(new)->>'product_id',
  58. to_jsonb(new)->>'inventory_id',
  59. to_jsonb(new)->>'order_id',
  60. to_jsonb(new)->>'order_item_id'
  61. );
  62. insert into ryzhov_ka.audit_log(table_name, operation, record_id, new_data)
  63. values (tg_table_name, tg_op, v_record_id, to_jsonb(new));
  64. return new;
  65. elsif tg_op = 'UPDATE' then
  66. v_record_id := coalesce(
  67. to_jsonb(new)->>'warehouse_id',
  68. to_jsonb(new)->>'employee_id',
  69. to_jsonb(new)->>'employee_warehouse_id',
  70. to_jsonb(new)->>'customer_id',
  71. to_jsonb(new)->>'user_id',
  72. to_jsonb(new)->>'product_id',
  73. to_jsonb(new)->>'inventory_id',
  74. to_jsonb(new)->>'order_id',
  75. to_jsonb(new)->>'order_item_id'
  76. );
  77. insert into ryzhov_ka.audit_log(table_name, operation, record_id, old_data, new_data)
  78. values (tg_table_name, tg_op, v_record_id, to_jsonb(old), to_jsonb(new));
  79. return new;
  80. elsif tg_op = 'DELETE' then
  81. v_record_id := coalesce(
  82. to_jsonb(old)->>'warehouse_id',
  83. to_jsonb(old)->>'employee_id',
  84. to_jsonb(old)->>'employee_warehouse_id',
  85. to_jsonb(old)->>'customer_id',
  86. to_jsonb(old)->>'user_id',
  87. to_jsonb(old)->>'product_id',
  88. to_jsonb(old)->>'inventory_id',
  89. to_jsonb(old)->>'order_id',
  90. to_jsonb(old)->>'order_item_id'
  91. );
  92. insert into ryzhov_ka.audit_log(table_name, operation, record_id, old_data)
  93. values (tg_table_name, tg_op, v_record_id, to_jsonb(old));
  94. return old;
  95. end if;
  96. return null;
  97. end;
  98. $$;
  99. ALTER FUNCTION ryzhov_ka.fn_audit_log_changes() OWNER TO ryzhov_ka;
  100. --
  101. -- TOC entry 1946 (class 1255 OID 454465)
  102. -- Name: fn_authenticate_user(character varying, text); Type: FUNCTION; Schema: ryzhov_ka; Owner: ryzhov_ka
  103. --
  104. CREATE FUNCTION ryzhov_ka.fn_authenticate_user(p_login character varying, p_password text) RETURNS TABLE(user_id integer, login character varying, role ryzhov_ka.app_role, employee_id integer, customer_id integer)
  105. LANGUAGE sql STABLE
  106. AS $$
  107. select
  108. au.user_id,
  109. au.login,
  110. au.role,
  111. au.employee_id,
  112. au.customer_id
  113. from ryzhov_ka.app_users au
  114. where au.login = p_login
  115. and au.is_active = true
  116. and au.password_hash = public.crypt(p_password, au.password_hash);
  117. $$;
  118. ALTER FUNCTION ryzhov_ka.fn_authenticate_user(p_login character varying, p_password text) OWNER TO ryzhov_ka;
  119. --
  120. -- TOC entry 2005 (class 1255 OID 471485)
  121. -- Name: fn_order_items_inventory(); Type: FUNCTION; Schema: ryzhov_ka; Owner: ryzhov_ka
  122. --
  123. CREATE FUNCTION ryzhov_ka.fn_order_items_inventory() RETURNS trigger
  124. LANGUAGE plpgsql
  125. AS $$
  126. DECLARE
  127. v_warehouse_id integer;
  128. v_available integer;
  129. BEGIN
  130. IF TG_OP = 'INSERT' THEN
  131. SELECT warehouse_id
  132. INTO v_warehouse_id
  133. FROM ryzhov_ka.orders
  134. WHERE order_id = NEW.order_id;
  135. SELECT quantity
  136. INTO v_available
  137. FROM ryzhov_ka.inventory
  138. WHERE warehouse_id = v_warehouse_id
  139. AND product_id = NEW.product_id
  140. FOR UPDATE;
  141. IF v_available IS NULL OR v_available < NEW.quantity THEN
  142. RETURN NULL;
  143. END IF;
  144. UPDATE ryzhov_ka.inventory
  145. SET quantity = quantity - NEW.quantity
  146. WHERE warehouse_id = v_warehouse_id
  147. AND product_id = NEW.product_id;
  148. RETURN NEW;
  149. END IF;
  150. IF TG_OP = 'DELETE' THEN
  151. SELECT warehouse_id
  152. INTO v_warehouse_id
  153. FROM ryzhov_ka.orders
  154. WHERE order_id = OLD.order_id;
  155. UPDATE ryzhov_ka.inventory
  156. SET quantity = quantity + OLD.quantity
  157. WHERE warehouse_id = v_warehouse_id
  158. AND product_id = OLD.product_id;
  159. RETURN OLD;
  160. END IF;
  161. IF TG_OP = 'UPDATE' THEN
  162. SELECT warehouse_id
  163. INTO v_warehouse_id
  164. FROM ryzhov_ka.orders
  165. WHERE order_id = OLD.order_id;
  166. UPDATE ryzhov_ka.inventory
  167. SET quantity = quantity + OLD.quantity
  168. WHERE warehouse_id = v_warehouse_id
  169. AND product_id = OLD.product_id;
  170. SELECT warehouse_id
  171. INTO v_warehouse_id
  172. FROM ryzhov_ka.orders
  173. WHERE order_id = NEW.order_id;
  174. SELECT quantity
  175. INTO v_available
  176. FROM ryzhov_ka.inventory
  177. WHERE warehouse_id = v_warehouse_id
  178. AND product_id = NEW.product_id
  179. FOR UPDATE;
  180. IF v_available IS NULL OR v_available < NEW.quantity THEN
  181. UPDATE ryzhov_ka.inventory
  182. SET quantity = quantity - OLD.quantity
  183. WHERE warehouse_id = (
  184. SELECT warehouse_id
  185. FROM ryzhov_ka.orders
  186. WHERE order_id = OLD.order_id
  187. )
  188. AND product_id = OLD.product_id;
  189. RETURN NULL;
  190. END IF;
  191. UPDATE ryzhov_ka.inventory
  192. SET quantity = quantity - NEW.quantity
  193. WHERE warehouse_id = v_warehouse_id
  194. AND product_id = NEW.product_id;
  195. RETURN NEW;
  196. END IF;
  197. RETURN NULL;
  198. END;
  199. $$;
  200. ALTER FUNCTION ryzhov_ka.fn_order_items_inventory() OWNER TO ryzhov_ka;
  201. SET default_tablespace = '';
  202. SET default_table_access_method = heap;
  203. --
  204. -- TOC entry 769 (class 1259 OID 451382)
  205. -- Name: app_users; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  206. --
  207. CREATE TABLE ryzhov_ka.app_users (
  208. user_id integer NOT NULL,
  209. login character varying(80) NOT NULL,
  210. password_hash text NOT NULL,
  211. role ryzhov_ka.app_role NOT NULL,
  212. is_active boolean DEFAULT true NOT NULL,
  213. employee_id integer,
  214. customer_id integer,
  215. CONSTRAINT chk_app_users_role_link CHECK ((((role = 'admin'::ryzhov_ka.app_role) AND (employee_id IS NOT NULL) AND (customer_id IS NULL)) OR ((role = 'user'::ryzhov_ka.app_role) AND (employee_id IS NULL) AND (customer_id IS NOT NULL))))
  216. );
  217. ALTER TABLE ryzhov_ka.app_users OWNER TO ryzhov_ka;
  218. --
  219. -- TOC entry 768 (class 1259 OID 451381)
  220. -- Name: app_users_user_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  221. --
  222. ALTER TABLE ryzhov_ka.app_users ALTER COLUMN user_id ADD GENERATED BY DEFAULT AS IDENTITY (
  223. SEQUENCE NAME ryzhov_ka.app_users_user_id_seq
  224. START WITH 1
  225. INCREMENT BY 1
  226. NO MINVALUE
  227. NO MAXVALUE
  228. CACHE 1
  229. );
  230. --
  231. -- TOC entry 936 (class 1259 OID 454472)
  232. -- Name: audit_log; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  233. --
  234. CREATE TABLE ryzhov_ka.audit_log (
  235. audit_id integer NOT NULL,
  236. table_name character varying(80) NOT NULL,
  237. operation character varying(10) NOT NULL,
  238. record_id text,
  239. changed_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
  240. db_user text DEFAULT CURRENT_USER NOT NULL,
  241. old_data jsonb,
  242. new_data jsonb
  243. );
  244. ALTER TABLE ryzhov_ka.audit_log OWNER TO ryzhov_ka;
  245. --
  246. -- TOC entry 935 (class 1259 OID 454471)
  247. -- Name: audit_log_audit_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  248. --
  249. ALTER TABLE ryzhov_ka.audit_log ALTER COLUMN audit_id ADD GENERATED BY DEFAULT AS IDENTITY (
  250. SEQUENCE NAME ryzhov_ka.audit_log_audit_id_seq
  251. START WITH 1
  252. INCREMENT BY 1
  253. NO MINVALUE
  254. NO MAXVALUE
  255. CACHE 1
  256. );
  257. --
  258. -- TOC entry 773 (class 1259 OID 451437)
  259. -- Name: customers; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  260. --
  261. CREATE TABLE ryzhov_ka.customers (
  262. customer_id integer NOT NULL,
  263. last_name character varying(80) NOT NULL,
  264. first_name character varying(80) NOT NULL,
  265. middle_name character varying(80),
  266. address text,
  267. phone character varying(20)
  268. );
  269. ALTER TABLE ryzhov_ka.customers OWNER TO ryzhov_ka;
  270. --
  271. -- TOC entry 772 (class 1259 OID 451436)
  272. -- Name: customers_customer_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  273. --
  274. ALTER TABLE ryzhov_ka.customers ALTER COLUMN customer_id ADD GENERATED BY DEFAULT AS IDENTITY (
  275. SEQUENCE NAME ryzhov_ka.customers_customer_id_seq
  276. START WITH 1
  277. INCREMENT BY 1
  278. NO MINVALUE
  279. NO MAXVALUE
  280. CACHE 1
  281. );
  282. --
  283. -- TOC entry 771 (class 1259 OID 451413)
  284. -- Name: employee_warehouses; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  285. --
  286. CREATE TABLE ryzhov_ka.employee_warehouses (
  287. employee_warehouse_id integer NOT NULL,
  288. employee_id integer NOT NULL,
  289. warehouse_id integer NOT NULL,
  290. start_date date NOT NULL
  291. );
  292. ALTER TABLE ryzhov_ka.employee_warehouses OWNER TO ryzhov_ka;
  293. --
  294. -- TOC entry 770 (class 1259 OID 451412)
  295. -- Name: employee_warehouses_employee_warehouse_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  296. --
  297. ALTER TABLE ryzhov_ka.employee_warehouses ALTER COLUMN employee_warehouse_id ADD GENERATED BY DEFAULT AS IDENTITY (
  298. SEQUENCE NAME ryzhov_ka.employee_warehouses_employee_warehouse_id_seq
  299. START WITH 1
  300. INCREMENT BY 1
  301. NO MINVALUE
  302. NO MAXVALUE
  303. CACHE 1
  304. );
  305. --
  306. -- TOC entry 767 (class 1259 OID 451364)
  307. -- Name: employees; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  308. --
  309. CREATE TABLE ryzhov_ka.employees (
  310. employee_id integer NOT NULL,
  311. last_name character varying(80) NOT NULL,
  312. first_name character varying(80) NOT NULL,
  313. middle_name character varying(80),
  314. position_name character varying(100) NOT NULL,
  315. birth_date date NOT NULL,
  316. CONSTRAINT chk_employees_birth_date_not_future CHECK ((birth_date <= CURRENT_DATE))
  317. );
  318. ALTER TABLE ryzhov_ka.employees OWNER TO ryzhov_ka;
  319. --
  320. -- TOC entry 766 (class 1259 OID 451363)
  321. -- Name: employees_employee_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  322. --
  323. ALTER TABLE ryzhov_ka.employees ALTER COLUMN employee_id ADD GENERATED BY DEFAULT AS IDENTITY (
  324. SEQUENCE NAME ryzhov_ka.employees_employee_id_seq
  325. START WITH 1
  326. INCREMENT BY 1
  327. NO MINVALUE
  328. NO MAXVALUE
  329. CACHE 1
  330. );
  331. --
  332. -- TOC entry 777 (class 1259 OID 451461)
  333. -- Name: inventory; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  334. --
  335. CREATE TABLE ryzhov_ka.inventory (
  336. inventory_id integer NOT NULL,
  337. warehouse_id integer NOT NULL,
  338. product_id integer NOT NULL,
  339. quantity integer NOT NULL,
  340. CONSTRAINT chk_inventory_quantity_non_negative CHECK ((quantity >= 0))
  341. );
  342. ALTER TABLE ryzhov_ka.inventory OWNER TO ryzhov_ka;
  343. --
  344. -- TOC entry 776 (class 1259 OID 451460)
  345. -- Name: inventory_inventory_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  346. --
  347. ALTER TABLE ryzhov_ka.inventory ALTER COLUMN inventory_id ADD GENERATED BY DEFAULT AS IDENTITY (
  348. SEQUENCE NAME ryzhov_ka.inventory_inventory_id_seq
  349. START WITH 1
  350. INCREMENT BY 1
  351. NO MINVALUE
  352. NO MAXVALUE
  353. CACHE 1
  354. );
  355. --
  356. -- TOC entry 781 (class 1259 OID 451517)
  357. -- Name: order_items; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  358. --
  359. CREATE TABLE ryzhov_ka.order_items (
  360. order_item_id integer NOT NULL,
  361. order_id integer NOT NULL,
  362. product_id integer NOT NULL,
  363. quantity integer NOT NULL,
  364. unit_price numeric(12,2) NOT NULL,
  365. CONSTRAINT chk_order_items_quantity_positive CHECK ((quantity > 0)),
  366. CONSTRAINT chk_order_items_unit_price_non_negative CHECK ((unit_price >= (0)::numeric))
  367. );
  368. ALTER TABLE ryzhov_ka.order_items OWNER TO ryzhov_ka;
  369. --
  370. -- TOC entry 780 (class 1259 OID 451516)
  371. -- Name: order_items_order_item_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  372. --
  373. ALTER TABLE ryzhov_ka.order_items ALTER COLUMN order_item_id ADD GENERATED BY DEFAULT AS IDENTITY (
  374. SEQUENCE NAME ryzhov_ka.order_items_order_item_id_seq
  375. START WITH 1
  376. INCREMENT BY 1
  377. NO MINVALUE
  378. NO MAXVALUE
  379. CACHE 1
  380. );
  381. --
  382. -- TOC entry 779 (class 1259 OID 451486)
  383. -- Name: orders; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  384. --
  385. CREATE TABLE ryzhov_ka.orders (
  386. order_id integer NOT NULL,
  387. customer_id integer NOT NULL,
  388. employee_id integer NOT NULL,
  389. order_date date NOT NULL,
  390. status character varying(30) NOT NULL,
  391. warehouse_id integer NOT NULL,
  392. CONSTRAINT chk_orders_status CHECK (((status)::text = ANY ((ARRAY['создан'::character varying, 'в работе'::character varying, 'выполнен'::character varying, 'отменён'::character varying])::text[])))
  393. );
  394. ALTER TABLE ryzhov_ka.orders OWNER TO ryzhov_ka;
  395. --
  396. -- TOC entry 778 (class 1259 OID 451485)
  397. -- Name: orders_order_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  398. --
  399. ALTER TABLE ryzhov_ka.orders ALTER COLUMN order_id ADD GENERATED BY DEFAULT AS IDENTITY (
  400. SEQUENCE NAME ryzhov_ka.orders_order_id_seq
  401. START WITH 1
  402. INCREMENT BY 1
  403. NO MINVALUE
  404. NO MAXVALUE
  405. CACHE 1
  406. );
  407. --
  408. -- TOC entry 775 (class 1259 OID 451448)
  409. -- Name: products; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  410. --
  411. CREATE TABLE ryzhov_ka.products (
  412. product_id integer NOT NULL,
  413. product_name character varying(150) NOT NULL,
  414. manufacturer character varying(120) NOT NULL,
  415. characteristics text,
  416. price numeric(12,2) NOT NULL,
  417. CONSTRAINT chk_products_price_non_negative CHECK ((price >= (0)::numeric))
  418. );
  419. ALTER TABLE ryzhov_ka.products OWNER TO ryzhov_ka;
  420. --
  421. -- TOC entry 774 (class 1259 OID 451447)
  422. -- Name: products_product_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  423. --
  424. ALTER TABLE ryzhov_ka.products ALTER COLUMN product_id ADD GENERATED BY DEFAULT AS IDENTITY (
  425. SEQUENCE NAME ryzhov_ka.products_product_id_seq
  426. START WITH 1
  427. INCREMENT BY 1
  428. NO MINVALUE
  429. NO MAXVALUE
  430. CACHE 1
  431. );
  432. --
  433. -- TOC entry 939 (class 1259 OID 454526)
  434. -- Name: v_customer_order_items; Type: VIEW; Schema: ryzhov_ka; Owner: ryzhov_ka
  435. --
  436. CREATE VIEW ryzhov_ka.v_customer_order_items AS
  437. SELECT o.order_id,
  438. o.order_date,
  439. c.customer_id,
  440. concat_ws(' '::text, c.last_name, c.first_name, c.middle_name) AS customer_full_name,
  441. e.employee_id,
  442. concat_ws(' '::text, e.last_name, e.first_name, e.middle_name) AS employee_full_name,
  443. p.product_id,
  444. p.product_name,
  445. p.manufacturer,
  446. oi.quantity,
  447. oi.unit_price,
  448. (((oi.quantity)::numeric * oi.unit_price))::numeric(12,2) AS item_total,
  449. o.status
  450. FROM ((((ryzhov_ka.orders o
  451. JOIN ryzhov_ka.customers c ON ((c.customer_id = o.customer_id)))
  452. JOIN ryzhov_ka.employees e ON ((e.employee_id = o.employee_id)))
  453. JOIN ryzhov_ka.order_items oi ON ((oi.order_id = o.order_id)))
  454. JOIN ryzhov_ka.products p ON ((p.product_id = oi.product_id)));
  455. ALTER VIEW ryzhov_ka.v_customer_order_items OWNER TO ryzhov_ka;
  456. --
  457. -- TOC entry 940 (class 1259 OID 454531)
  458. -- Name: v_orders_with_total; Type: VIEW; Schema: ryzhov_ka; Owner: ryzhov_ka
  459. --
  460. CREATE VIEW ryzhov_ka.v_orders_with_total AS
  461. SELECT o.order_id,
  462. o.customer_id,
  463. concat_ws(' '::text, c.last_name, c.first_name, c.middle_name) AS customer_name,
  464. o.employee_id,
  465. concat_ws(' '::text, e.last_name, e.first_name, e.middle_name) AS employee_name,
  466. o.order_date,
  467. o.status,
  468. (COALESCE(sum(((oi.quantity)::numeric * oi.unit_price)), (0)::numeric))::numeric(12,2) AS order_total
  469. FROM (((ryzhov_ka.orders o
  470. JOIN ryzhov_ka.customers c ON ((c.customer_id = o.customer_id)))
  471. JOIN ryzhov_ka.employees e ON ((e.employee_id = o.employee_id)))
  472. LEFT JOIN ryzhov_ka.order_items oi ON ((oi.order_id = o.order_id)))
  473. GROUP BY o.order_id, o.customer_id, c.last_name, c.first_name, c.middle_name, o.employee_id, e.last_name, e.first_name, e.middle_name, o.order_date, o.status;
  474. ALTER VIEW ryzhov_ka.v_orders_with_total OWNER TO ryzhov_ka;
  475. --
  476. -- TOC entry 765 (class 1259 OID 451345)
  477. -- Name: warehouses; Type: TABLE; Schema: ryzhov_ka; Owner: ryzhov_ka
  478. --
  479. CREATE TABLE ryzhov_ka.warehouses (
  480. warehouse_id integer NOT NULL,
  481. warehouse_number character varying(30) NOT NULL,
  482. address text NOT NULL,
  483. capacity integer NOT NULL,
  484. CONSTRAINT chk_warehouses_capacity_non_negative CHECK ((capacity >= 0))
  485. );
  486. ALTER TABLE ryzhov_ka.warehouses OWNER TO ryzhov_ka;
  487. --
  488. -- TOC entry 764 (class 1259 OID 451344)
  489. -- Name: warehouses_warehouse_id_seq; Type: SEQUENCE; Schema: ryzhov_ka; Owner: ryzhov_ka
  490. --
  491. ALTER TABLE ryzhov_ka.warehouses ALTER COLUMN warehouse_id ADD GENERATED BY DEFAULT AS IDENTITY (
  492. SEQUENCE NAME ryzhov_ka.warehouses_warehouse_id_seq
  493. START WITH 1
  494. INCREMENT BY 1
  495. NO MINVALUE
  496. NO MAXVALUE
  497. CACHE 1
  498. );
  499. --
  500. -- TOC entry 6636 (class 0 OID 451382)
  501. -- Dependencies: 769
  502. -- Data for Name: app_users; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  503. --
  504. COPY ryzhov_ka.app_users (user_id, login, password_hash, role, is_active, employee_id, customer_id) FROM stdin;
  505. 1 admin $2a$06$GJWf9W61pP4nRNQDEUgjKu3cEvJvTR0dVsgcsxmbWVqy312Pt1pja admin t 1 \N
  506. 2 user $2a$06$mj/zywYxgQrlFM5u5DBalOFkGmexjRUuc8P/SLXAFTR9M81C.RfUC user t \N 2
  507. \.
  508. --
  509. -- TOC entry 6650 (class 0 OID 454472)
  510. -- Dependencies: 936
  511. -- Data for Name: audit_log; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  512. --
  513. COPY ryzhov_ka.audit_log (audit_id, table_name, operation, record_id, changed_at, db_user, old_data, new_data) FROM stdin;
  514. 1 inventory UPDATE 2 2026-06-02 16:24:23.499611 ryzhov_ka {"quantity": 20, "product_id": 2, "inventory_id": 2, "warehouse_id": 2} {"quantity": 20, "product_id": 2, "inventory_id": 2, "warehouse_id": 2}
  515. 2 order_items INSERT 3 2026-06-02 16:24:55.049328 ryzhov_ka \N {"order_id": 4, "quantity": 1000, "product_id": 3, "unit_price": 1500.00, "order_item_id": 6}
  516. 3 order_items DELETE 3 2026-06-02 16:25:32.911017 ryzhov_ka {"order_id": 4, "quantity": 1000, "product_id": 3, "unit_price": 1500.00, "order_item_id": 6} \N
  517. 4 warehouses UPDATE 2 2026-06-02 16:37:15.758221 ryzhov_ka {"address": "ул. Примерная, 2", "capacity": 20, "warehouse_id": 2, "warehouse_number": "N-002"} {"address": "ул. Примерная, 2", "capacity": 50, "warehouse_id": 2, "warehouse_number": "N-002"}
  518. 5 orders UPDATE 1 2026-06-21 16:29:05.998556 ryzhov_ka {"status": "создан", "order_id": 3, "order_date": "2026-04-09", "customer_id": 2, "employee_id": 3, "warehouse_id": null} {"status": "создан", "order_id": 3, "order_date": "2026-04-09", "customer_id": 2, "employee_id": 3, "warehouse_id": 1}
  519. 6 orders UPDATE 1 2026-06-21 16:29:05.998556 ryzhov_ka {"status": "в работе", "order_id": 4, "order_date": "2026-06-01", "customer_id": 3, "employee_id": 1, "warehouse_id": null} {"status": "в работе", "order_id": 4, "order_date": "2026-06-01", "customer_id": 3, "employee_id": 1, "warehouse_id": 1}
  520. 7 orders UPDATE 1 2026-06-21 16:29:05.998556 ryzhov_ka {"status": "выполнен", "order_id": 1, "order_date": "2026-06-01", "customer_id": 1, "employee_id": 2, "warehouse_id": null} {"status": "выполнен", "order_id": 1, "order_date": "2026-06-01", "customer_id": 1, "employee_id": 2, "warehouse_id": 1}
  521. 8 orders UPDATE 1 2026-06-21 16:29:05.998556 ryzhov_ka {"status": "отменён", "order_id": 2, "order_date": "2026-06-01", "customer_id": 2, "employee_id": 3, "warehouse_id": null} {"status": "отменён", "order_id": 2, "order_date": "2026-06-01", "customer_id": 2, "employee_id": 3, "warehouse_id": 1}
  522. 9 inventory UPDATE 1 2026-06-21 16:38:46.802904 ryzhov_ka {"quantity": 10, "product_id": 1, "inventory_id": 1, "warehouse_id": 1} {"quantity": 8, "product_id": 1, "inventory_id": 1, "warehouse_id": 1}
  523. 10 order_items INSERT 1 2026-06-21 16:38:46.802904 ryzhov_ka \N {"order_id": 1, "quantity": 2, "product_id": 1, "unit_price": 1000.00, "order_item_id": 7}
  524. 11 orders INSERT 2 2026-06-25 11:11:45.058147 ryzhov_ka \N {"status": "создан", "order_id": 5, "order_date": "2026-06-25", "customer_id": 1, "employee_id": 2, "warehouse_id": 2}
  525. 12 inventory UPDATE 2 2026-06-25 11:25:10.592528 ryzhov_ka {"quantity": 20, "product_id": 2, "inventory_id": 2, "warehouse_id": 2} {"quantity": 13, "product_id": 2, "inventory_id": 2, "warehouse_id": 2}
  526. 13 order_items INSERT 2 2026-06-25 11:25:10.592528 ryzhov_ka \N {"order_id": 5, "quantity": 7, "product_id": 2, "unit_price": 2500.00, "order_item_id": 8}
  527. 14 inventory UPDATE 2 2026-06-25 11:25:20.314436 ryzhov_ka {"quantity": 13, "product_id": 2, "inventory_id": 2, "warehouse_id": 2} {"quantity": 20, "product_id": 2, "inventory_id": 2, "warehouse_id": 2}
  528. 15 inventory UPDATE 2 2026-06-25 11:25:20.314436 ryzhov_ka {"quantity": 20, "product_id": 2, "inventory_id": 2, "warehouse_id": 2} {"quantity": 13, "product_id": 2, "inventory_id": 2, "warehouse_id": 2}
  529. 16 order_items UPDATE 2 2026-06-25 11:25:20.314436 ryzhov_ka {"order_id": 5, "quantity": 7, "product_id": 2, "unit_price": 2500.00, "order_item_id": 8} {"order_id": 5, "quantity": 7, "product_id": 2, "unit_price": 2501.00, "order_item_id": 8}
  530. 17 inventory UPDATE 2 2026-06-25 11:31:08.033551 ryzhov_ka {"quantity": 13, "product_id": 2, "inventory_id": 2, "warehouse_id": 2} {"quantity": 20, "product_id": 2, "inventory_id": 2, "warehouse_id": 2}
  531. 18 inventory UPDATE 2 2026-06-25 11:31:08.033551 ryzhov_ka {"quantity": 20, "product_id": 2, "inventory_id": 2, "warehouse_id": 2} {"quantity": 10, "product_id": 2, "inventory_id": 2, "warehouse_id": 2}
  532. 19 order_items UPDATE 2 2026-06-25 11:31:08.033551 ryzhov_ka {"order_id": 5, "quantity": 7, "product_id": 2, "unit_price": 2501.00, "order_item_id": 8} {"order_id": 5, "quantity": 10, "product_id": 2, "unit_price": 2500.00, "order_item_id": 8}
  533. 20 inventory UPDATE 2 2026-06-25 12:12:40.361203 ryzhov_ka {"quantity": 10, "product_id": 2, "inventory_id": 2, "warehouse_id": 2} {"quantity": 50, "product_id": 2, "inventory_id": 2, "warehouse_id": 2}
  534. \.
  535. --
  536. -- TOC entry 6640 (class 0 OID 451437)
  537. -- Dependencies: 773
  538. -- Data for Name: customers; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  539. --
  540. COPY ryzhov_ka.customers (customer_id, last_name, first_name, middle_name, address, phone) FROM stdin;
  541. 1 Кузнецов Алексей Дмитриевич ул. Северная, 10 +7 900 100-10-10
  542. 2 Орлова Мария Сергеевна ул. Центральная, 25 +7 900 200-20-20
  543. 3 Морозов Денис Павлович ул. Южная, 7 +7 900 300-30-30
  544. \.
  545. --
  546. -- TOC entry 6638 (class 0 OID 451413)
  547. -- Dependencies: 771
  548. -- Data for Name: employee_warehouses; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  549. --
  550. COPY ryzhov_ka.employee_warehouses (employee_warehouse_id, employee_id, warehouse_id, start_date) FROM stdin;
  551. 1 1 1 2026-05-20
  552. 2 2 2 2026-05-21
  553. 3 3 3 2026-05-22
  554. \.
  555. --
  556. -- TOC entry 6634 (class 0 OID 451364)
  557. -- Dependencies: 767
  558. -- Data for Name: employees; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  559. --
  560. COPY ryzhov_ka.employees (employee_id, last_name, first_name, middle_name, position_name, birth_date) FROM stdin;
  561. 1 Петров Илья Андреевич менеджер 1995-05-20
  562. 2 Иванов Сергей Петрович продавец 1998-05-21
  563. 3 Смирнова Анна Олеговна кладовщик 1992-05-22
  564. \.
  565. --
  566. -- TOC entry 6644 (class 0 OID 451461)
  567. -- Dependencies: 777
  568. -- Data for Name: inventory; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  569. --
  570. COPY ryzhov_ka.inventory (inventory_id, warehouse_id, product_id, quantity) FROM stdin;
  571. 3 3 3 30
  572. 1 1 1 8
  573. 2 2 2 50
  574. \.
  575. --
  576. -- TOC entry 6648 (class 0 OID 451517)
  577. -- Dependencies: 781
  578. -- Data for Name: order_items; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  579. --
  580. COPY ryzhov_ka.order_items (order_item_id, order_id, product_id, quantity, unit_price) FROM stdin;
  581. 3 1 2 19 300.00
  582. 2 3 1 1 200.00
  583. 1 4 3 3 500.00
  584. 5 2 2 3 500.00
  585. 4 3 1 4 300.00
  586. 7 1 1 2 1000.00
  587. 8 5 2 10 2500.00
  588. \.
  589. --
  590. -- TOC entry 6646 (class 0 OID 451486)
  591. -- Dependencies: 779
  592. -- Data for Name: orders; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  593. --
  594. COPY ryzhov_ka.orders (order_id, customer_id, employee_id, order_date, status, warehouse_id) FROM stdin;
  595. 3 2 3 2026-04-09 создан 1
  596. 4 3 1 2026-06-01 в работе 1
  597. 1 1 2 2026-06-01 выполнен 1
  598. 2 2 3 2026-06-01 отменён 1
  599. 5 1 2 2026-06-25 создан 2
  600. \.
  601. --
  602. -- TOC entry 6642 (class 0 OID 451448)
  603. -- Dependencies: 775
  604. -- Data for Name: products; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  605. --
  606. COPY ryzhov_ka.products (product_id, product_name, manufacturer, characteristics, price) FROM stdin;
  607. 1 Ноутбук Lenovo manufacturer_1 Описание 1 1000.00
  608. 2 Монитор Samsung manufacturer_2 Описание 2 2500.00
  609. 3 Клавиатура Logitech manufacturer_3 Описание 3 5000.00
  610. \.
  611. --
  612. -- TOC entry 6632 (class 0 OID 451345)
  613. -- Dependencies: 765
  614. -- Data for Name: warehouses; Type: TABLE DATA; Schema: ryzhov_ka; Owner: ryzhov_ka
  615. --
  616. COPY ryzhov_ka.warehouses (warehouse_id, warehouse_number, address, capacity) FROM stdin;
  617. 1 N-001 ул. Примерная, 1 10
  618. 3 N-003 ул. Примерная, 3 30
  619. 2 N-002 ул. Примерная, 2 50
  620. \.
  621. --
  622. -- TOC entry 6656 (class 0 OID 0)
  623. -- Dependencies: 768
  624. -- Name: app_users_user_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  625. --
  626. SELECT pg_catalog.setval('ryzhov_ka.app_users_user_id_seq', 1, false);
  627. --
  628. -- TOC entry 6657 (class 0 OID 0)
  629. -- Dependencies: 935
  630. -- Name: audit_log_audit_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  631. --
  632. SELECT pg_catalog.setval('ryzhov_ka.audit_log_audit_id_seq', 20, true);
  633. --
  634. -- TOC entry 6658 (class 0 OID 0)
  635. -- Dependencies: 772
  636. -- Name: customers_customer_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  637. --
  638. SELECT pg_catalog.setval('ryzhov_ka.customers_customer_id_seq', 1, false);
  639. --
  640. -- TOC entry 6659 (class 0 OID 0)
  641. -- Dependencies: 770
  642. -- Name: employee_warehouses_employee_warehouse_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  643. --
  644. SELECT pg_catalog.setval('ryzhov_ka.employee_warehouses_employee_warehouse_id_seq', 1, false);
  645. --
  646. -- TOC entry 6660 (class 0 OID 0)
  647. -- Dependencies: 766
  648. -- Name: employees_employee_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  649. --
  650. SELECT pg_catalog.setval('ryzhov_ka.employees_employee_id_seq', 1, false);
  651. --
  652. -- TOC entry 6661 (class 0 OID 0)
  653. -- Dependencies: 776
  654. -- Name: inventory_inventory_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  655. --
  656. SELECT pg_catalog.setval('ryzhov_ka.inventory_inventory_id_seq', 1, false);
  657. --
  658. -- TOC entry 6662 (class 0 OID 0)
  659. -- Dependencies: 780
  660. -- Name: order_items_order_item_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  661. --
  662. SELECT pg_catalog.setval('ryzhov_ka.order_items_order_item_id_seq', 8, true);
  663. --
  664. -- TOC entry 6663 (class 0 OID 0)
  665. -- Dependencies: 778
  666. -- Name: orders_order_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  667. --
  668. SELECT pg_catalog.setval('ryzhov_ka.orders_order_id_seq', 5, true);
  669. --
  670. -- TOC entry 6664 (class 0 OID 0)
  671. -- Dependencies: 774
  672. -- Name: products_product_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  673. --
  674. SELECT pg_catalog.setval('ryzhov_ka.products_product_id_seq', 1, false);
  675. --
  676. -- TOC entry 6665 (class 0 OID 0)
  677. -- Dependencies: 764
  678. -- Name: warehouses_warehouse_id_seq; Type: SEQUENCE SET; Schema: ryzhov_ka; Owner: ryzhov_ka
  679. --
  680. SELECT pg_catalog.setval('ryzhov_ka.warehouses_warehouse_id_seq', 1, false);
  681. --
  682. -- TOC entry 6341 (class 2606 OID 451398)
  683. -- Name: app_users app_users_employee_id_key; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  684. --
  685. ALTER TABLE ONLY ryzhov_ka.app_users
  686. ADD CONSTRAINT app_users_employee_id_key UNIQUE (employee_id);
  687. --
  688. -- TOC entry 6343 (class 2606 OID 451396)
  689. -- Name: app_users app_users_login_key; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  690. --
  691. ALTER TABLE ONLY ryzhov_ka.app_users
  692. ADD CONSTRAINT app_users_login_key UNIQUE (login);
  693. --
  694. -- TOC entry 6345 (class 2606 OID 451394)
  695. -- Name: app_users app_users_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  696. --
  697. ALTER TABLE ONLY ryzhov_ka.app_users
  698. ADD CONSTRAINT app_users_pkey PRIMARY KEY (user_id);
  699. --
  700. -- TOC entry 6365 (class 2606 OID 454485)
  701. -- Name: audit_log audit_log_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  702. --
  703. ALTER TABLE ONLY ryzhov_ka.audit_log
  704. ADD CONSTRAINT audit_log_pkey PRIMARY KEY (audit_id);
  705. --
  706. -- TOC entry 6353 (class 2606 OID 451446)
  707. -- Name: customers customers_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  708. --
  709. ALTER TABLE ONLY ryzhov_ka.customers
  710. ADD CONSTRAINT customers_pkey PRIMARY KEY (customer_id);
  711. --
  712. -- TOC entry 6349 (class 2606 OID 451421)
  713. -- Name: employee_warehouses employee_warehouses_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  714. --
  715. ALTER TABLE ONLY ryzhov_ka.employee_warehouses
  716. ADD CONSTRAINT employee_warehouses_pkey PRIMARY KEY (employee_warehouse_id);
  717. --
  718. -- TOC entry 6339 (class 2606 OID 451374)
  719. -- Name: employees employees_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  720. --
  721. ALTER TABLE ONLY ryzhov_ka.employees
  722. ADD CONSTRAINT employees_pkey PRIMARY KEY (employee_id);
  723. --
  724. -- TOC entry 6357 (class 2606 OID 451470)
  725. -- Name: inventory inventory_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  726. --
  727. ALTER TABLE ONLY ryzhov_ka.inventory
  728. ADD CONSTRAINT inventory_pkey PRIMARY KEY (inventory_id);
  729. --
  730. -- TOC entry 6363 (class 2606 OID 451528)
  731. -- Name: order_items order_items_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  732. --
  733. ALTER TABLE ONLY ryzhov_ka.order_items
  734. ADD CONSTRAINT order_items_pkey PRIMARY KEY (order_item_id);
  735. --
  736. -- TOC entry 6361 (class 2606 OID 451496)
  737. -- Name: orders orders_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  738. --
  739. ALTER TABLE ONLY ryzhov_ka.orders
  740. ADD CONSTRAINT orders_pkey PRIMARY KEY (order_id);
  741. --
  742. -- TOC entry 6355 (class 2606 OID 451459)
  743. -- Name: products products_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  744. --
  745. ALTER TABLE ONLY ryzhov_ka.products
  746. ADD CONSTRAINT products_pkey PRIMARY KEY (product_id);
  747. --
  748. -- TOC entry 6351 (class 2606 OID 451425)
  749. -- Name: employee_warehouses uq_employee_warehouses_employee_warehouse; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  750. --
  751. ALTER TABLE ONLY ryzhov_ka.employee_warehouses
  752. ADD CONSTRAINT uq_employee_warehouses_employee_warehouse UNIQUE (employee_id, warehouse_id);
  753. --
  754. -- TOC entry 6359 (class 2606 OID 451474)
  755. -- Name: inventory uq_inventory_warehouse_product; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  756. --
  757. ALTER TABLE ONLY ryzhov_ka.inventory
  758. ADD CONSTRAINT uq_inventory_warehouse_product UNIQUE (warehouse_id, product_id);
  759. --
  760. -- TOC entry 6335 (class 2606 OID 451358)
  761. -- Name: warehouses uq_warehouses_number; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  762. --
  763. ALTER TABLE ONLY ryzhov_ka.warehouses
  764. ADD CONSTRAINT uq_warehouses_number UNIQUE (warehouse_number);
  765. --
  766. -- TOC entry 6337 (class 2606 OID 451356)
  767. -- Name: warehouses warehouses_pkey; Type: CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  768. --
  769. ALTER TABLE ONLY ryzhov_ka.warehouses
  770. ADD CONSTRAINT warehouses_pkey PRIMARY KEY (warehouse_id);
  771. --
  772. -- TOC entry 6346 (class 1259 OID 454463)
  773. -- Name: ux_app_users_customer_id_not_null; Type: INDEX; Schema: ryzhov_ka; Owner: ryzhov_ka
  774. --
  775. CREATE UNIQUE INDEX ux_app_users_customer_id_not_null ON ryzhov_ka.app_users USING btree (customer_id) WHERE (customer_id IS NOT NULL);
  776. --
  777. -- TOC entry 6347 (class 1259 OID 454462)
  778. -- Name: ux_app_users_employee_id_not_null; Type: INDEX; Schema: ryzhov_ka; Owner: ryzhov_ka
  779. --
  780. CREATE UNIQUE INDEX ux_app_users_employee_id_not_null ON ryzhov_ka.app_users USING btree (employee_id) WHERE (employee_id IS NOT NULL);
  781. --
  782. -- TOC entry 6379 (class 2620 OID 454495)
  783. -- Name: app_users trg_audit_app_users; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  784. --
  785. CREATE TRIGGER trg_audit_app_users AFTER INSERT OR DELETE OR UPDATE ON ryzhov_ka.app_users FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_audit_log_changes();
  786. --
  787. -- TOC entry 6381 (class 2620 OID 454494)
  788. -- Name: customers trg_audit_customers; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  789. --
  790. CREATE TRIGGER trg_audit_customers AFTER INSERT OR DELETE OR UPDATE ON ryzhov_ka.customers FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_audit_log_changes();
  791. --
  792. -- TOC entry 6380 (class 2620 OID 454493)
  793. -- Name: employee_warehouses trg_audit_employee_warehouses; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  794. --
  795. CREATE TRIGGER trg_audit_employee_warehouses AFTER INSERT OR DELETE OR UPDATE ON ryzhov_ka.employee_warehouses FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_audit_log_changes();
  796. --
  797. -- TOC entry 6378 (class 2620 OID 454492)
  798. -- Name: employees trg_audit_employees; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  799. --
  800. CREATE TRIGGER trg_audit_employees AFTER INSERT OR DELETE OR UPDATE ON ryzhov_ka.employees FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_audit_log_changes();
  801. --
  802. -- TOC entry 6383 (class 2620 OID 454497)
  803. -- Name: inventory trg_audit_inventory; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  804. --
  805. CREATE TRIGGER trg_audit_inventory AFTER INSERT OR DELETE OR UPDATE ON ryzhov_ka.inventory FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_audit_log_changes();
  806. --
  807. -- TOC entry 6385 (class 2620 OID 454499)
  808. -- Name: order_items trg_audit_order_items; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  809. --
  810. CREATE TRIGGER trg_audit_order_items AFTER INSERT OR DELETE OR UPDATE ON ryzhov_ka.order_items FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_audit_log_changes();
  811. --
  812. -- TOC entry 6384 (class 2620 OID 454498)
  813. -- Name: orders trg_audit_orders; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  814. --
  815. CREATE TRIGGER trg_audit_orders AFTER INSERT OR DELETE OR UPDATE ON ryzhov_ka.orders FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_audit_log_changes();
  816. --
  817. -- TOC entry 6382 (class 2620 OID 454496)
  818. -- Name: products trg_audit_products; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  819. --
  820. CREATE TRIGGER trg_audit_products AFTER INSERT OR DELETE OR UPDATE ON ryzhov_ka.products FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_audit_log_changes();
  821. --
  822. -- TOC entry 6377 (class 2620 OID 454491)
  823. -- Name: warehouses trg_audit_warehouses; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  824. --
  825. CREATE TRIGGER trg_audit_warehouses AFTER INSERT OR DELETE OR UPDATE ON ryzhov_ka.warehouses FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_audit_log_changes();
  826. --
  827. -- TOC entry 6386 (class 2620 OID 471486)
  828. -- Name: order_items trg_order_items_inventory; Type: TRIGGER; Schema: ryzhov_ka; Owner: ryzhov_ka
  829. --
  830. CREATE TRIGGER trg_order_items_inventory BEFORE INSERT OR DELETE OR UPDATE ON ryzhov_ka.order_items FOR EACH ROW EXECUTE FUNCTION ryzhov_ka.fn_order_items_inventory();
  831. --
  832. -- TOC entry 6366 (class 2606 OID 451399)
  833. -- Name: app_users app_users_employee_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  834. --
  835. ALTER TABLE ONLY ryzhov_ka.app_users
  836. ADD CONSTRAINT app_users_employee_id_fkey FOREIGN KEY (employee_id) REFERENCES ryzhov_ka.employees(employee_id);
  837. --
  838. -- TOC entry 6368 (class 2606 OID 451426)
  839. -- Name: employee_warehouses employee_warehouses_employee_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  840. --
  841. ALTER TABLE ONLY ryzhov_ka.employee_warehouses
  842. ADD CONSTRAINT employee_warehouses_employee_id_fkey FOREIGN KEY (employee_id) REFERENCES ryzhov_ka.employees(employee_id);
  843. --
  844. -- TOC entry 6369 (class 2606 OID 451431)
  845. -- Name: employee_warehouses employee_warehouses_warehouse_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  846. --
  847. ALTER TABLE ONLY ryzhov_ka.employee_warehouses
  848. ADD CONSTRAINT employee_warehouses_warehouse_id_fkey FOREIGN KEY (warehouse_id) REFERENCES ryzhov_ka.warehouses(warehouse_id);
  849. --
  850. -- TOC entry 6367 (class 2606 OID 451594)
  851. -- Name: app_users fk_app_users_customer; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  852. --
  853. ALTER TABLE ONLY ryzhov_ka.app_users
  854. ADD CONSTRAINT fk_app_users_customer FOREIGN KEY (customer_id) REFERENCES ryzhov_ka.customers(customer_id);
  855. --
  856. -- TOC entry 6370 (class 2606 OID 451480)
  857. -- Name: inventory inventory_product_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  858. --
  859. ALTER TABLE ONLY ryzhov_ka.inventory
  860. ADD CONSTRAINT inventory_product_id_fkey FOREIGN KEY (product_id) REFERENCES ryzhov_ka.products(product_id);
  861. --
  862. -- TOC entry 6371 (class 2606 OID 451475)
  863. -- Name: inventory inventory_warehouse_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  864. --
  865. ALTER TABLE ONLY ryzhov_ka.inventory
  866. ADD CONSTRAINT inventory_warehouse_id_fkey FOREIGN KEY (warehouse_id) REFERENCES ryzhov_ka.warehouses(warehouse_id);
  867. --
  868. -- TOC entry 6375 (class 2606 OID 451529)
  869. -- Name: order_items order_items_order_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  870. --
  871. ALTER TABLE ONLY ryzhov_ka.order_items
  872. ADD CONSTRAINT order_items_order_id_fkey FOREIGN KEY (order_id) REFERENCES ryzhov_ka.orders(order_id);
  873. --
  874. -- TOC entry 6376 (class 2606 OID 451534)
  875. -- Name: order_items order_items_product_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  876. --
  877. ALTER TABLE ONLY ryzhov_ka.order_items
  878. ADD CONSTRAINT order_items_product_id_fkey FOREIGN KEY (product_id) REFERENCES ryzhov_ka.products(product_id);
  879. --
  880. -- TOC entry 6372 (class 2606 OID 451497)
  881. -- Name: orders orders_customer_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  882. --
  883. ALTER TABLE ONLY ryzhov_ka.orders
  884. ADD CONSTRAINT orders_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES ryzhov_ka.customers(customer_id);
  885. --
  886. -- TOC entry 6373 (class 2606 OID 451502)
  887. -- Name: orders orders_employee_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  888. --
  889. ALTER TABLE ONLY ryzhov_ka.orders
  890. ADD CONSTRAINT orders_employee_id_fkey FOREIGN KEY (employee_id) REFERENCES ryzhov_ka.employees(employee_id);
  891. --
  892. -- TOC entry 6374 (class 2606 OID 471480)
  893. -- Name: orders orders_warehouse_id_fkey; Type: FK CONSTRAINT; Schema: ryzhov_ka; Owner: ryzhov_ka
  894. --
  895. ALTER TABLE ONLY ryzhov_ka.orders
  896. ADD CONSTRAINT orders_warehouse_id_fkey FOREIGN KEY (warehouse_id) REFERENCES ryzhov_ka.warehouses(warehouse_id);
  897. -- Completed on 2026-06-25 13:56:44 MSK
  898. --
  899. -- PostgreSQL database dump complete
  900. --
  901. \unrestrict c7tibngenZ3JJspWyr31r6mzMatTJpD95OAdikTmKQcJiOj35naiZ8VfDYXrpQI