1.sql 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. DO $$
  2. begin
  3. -- Создаем таблицу званий
  4. if exists(select from pg_catalog.pg_tables where tablename = 'ranks') then
  5. raise notice 'Ranks table exists';
  6. else
  7. create table ranks (id serial primary key, name varchar(32));
  8. end if;
  9. -- Создаем таблицу пользователей
  10. if exists(select from pg_catalog.pg_tables where tablename = 'users') then
  11. raise notice 'Users table exists';
  12. else
  13. create table users (id serial primary key, name varchar(64), rank_id integer references ranks(id));
  14. end if;
  15. -- Заполняем звания
  16. if exists(select from ranks where name = 'Рядовой') then
  17. raise notice 'Ranks values exist';
  18. else
  19. insert into ranks(name) values ('Рядовой');
  20. insert into ranks(name) values ('Ефрейтор');
  21. insert into ranks(name) values ('Младший сержант');
  22. insert into ranks(name) values ('Сержант');
  23. insert into ranks(name) values ('Старший сержант');
  24. insert into ranks(name) values ('Старшина');
  25. insert into ranks(name) values ('Прапорщик');
  26. insert into ranks(name) values ('Старший прапорщик');
  27. insert into ranks(name) values ('Младший лейтенант');
  28. insert into ranks(name) values ('Лейтенант');
  29. insert into ranks(name) values ('Старший лейтенант');
  30. insert into ranks(name) values ('Капитан');
  31. insert into ranks(name) values ('Майор');
  32. insert into ranks(name) values ('Подполковник');
  33. insert into ranks(name) values ('Полковник');
  34. insert into ranks(name) values ('Генерал майор');
  35. insert into ranks(name) values ('Генерал лейтенант');
  36. insert into ranks(name) values ('Генерал полковник');
  37. insert into ranks(name) values ('Генерал армии');
  38. insert into ranks(name) values ('Маршал России');
  39. end if;
  40. -- Обновляем username(varchar) -> user_id(integer) в measurement_batch
  41. if exists(select from information_schema.columns where table_name='measurement_batch' and column_name='user_id') then
  42. raise notice 'user_id column already exists in table measurement_batch';
  43. else
  44. alter table measurement_batch rename column username to user_id;
  45. alter table measurement_batch alter column user_id type integer using null;
  46. end if;
  47. -- Привязываем measurement_batch(user_id) -> users(id)
  48. if exists(select from information_schema.referential_constraints where constraint_name = 'measurement_batch_user_id_fkey') then
  49. raise notice 'Foreign key measurement_batch(user_id) -> users(id) exists';
  50. else
  51. alter table measurement_batch add foreign key(user_id) references users(id);
  52. end if;
  53. -- Заполняем тестовые данные:
  54. -- -- Пользователь
  55. if exists(select from users) then
  56. raise notice 'Test user exists';
  57. else
  58. insert into users(name, rank_id) values ('Левитан Всеволод Романович', (select id from ranks order by id desc limit 1));
  59. end if;
  60. -- -- Измерение
  61. if exists(select from measurement_batch) then
  62. raise notice 'Test batch exists';
  63. else
  64. insert into measurement_batch(start_period, user_id, pos_x, pos_y) values (now(), (select id from users limit 1), 69.00, 42.00);
  65. end if;
  66. END$$;
  67. -- Проверяем
  68. select batch.id, batch.start_period, concat(rnk.name, ' ', usr.name), batch.pos_x, batch.pos_y from measurement_batch batch join users usr on batch.user_id = usr.id join ranks rnk on usr.rank_id = rnk.id;