Powiedzmy, że aplikacja ma tabelę służącą do przechowywania uprawnień o następującej strukturze:
CREATE TABLE RolePermission (RoleId INT, PermissionId INT, OnSite INT, OffSite INT); ALTER TABLE RolePermission ADD PRIMARY KEY (RoleId, PermissionId);
Kolumna RoleId to identyfikator użytkownika (liczba, która wskazuje na nazwę użytkownika przechowywaną prawdopodobnie w innej tabeli).
Kolumna PermissionId to identyfikator uprawnienia (również liczba, która wskazuje na nazwę uprawnienia przechowywaną w innej tabeli).
Chodzi o skopiowanie uprawnień jednego użytkownika, a ponieważ pracujemy na tabelach, to należałoby powiedzieć skopiowanie wybranych rekordów z tej tabeli do tej samej tabeli ale podmieniając wartość w kolumnie RoleId.
Załóżmy, że w tabeli mamy takie oto dane:
INSERT INTO RolePermission(RoleId, PermissionId, OnSite, OffSite) VALUES (1,101,1,1), (1,102,1,1), (1,103,1,1), (2,101,1,1), (2,104,1,1), (3,102,1,1), (3,104,1,1), (4,105,1,1)
Najlepiej jest zacząć od wyświetlenia wierszy do skopiowania. Załóżmy, że kopiuję uprawnienia użytkownika nr 2:
SELECT * FROM RolePermission WHERE RoleId=2;
Polecenie, które skopiuje dane to INSERT INTO … SELECT. Jedyna różnica jest taka, że w poleceniu SELECT zasilającym INSERT trzeba podmienić RoleId na nową wartość – dajmy na to na 10 (to jest identyfikator naszego nowego użytkownika):
INSERT INTO RolePermission(RoleId, PermissionId, OnSite, OffSite) SELECT 10, PermissionId, OnSite, OffSite FROM RolePermission WHERE RoleId=2;
To polecenie wybierze uprawnienia zdefiniowane dla użytkownika nr 2 i skopiuje rekordy do tej samej tabeli zamieniając RoleId na 10. Po wszystkim można sprawdzić uprawnienia użytkownika nr 10:
SELECT * FROM RolePermission WHERE RoleId=10;
Więcej o tym w sekcji 7, lekcja „VIDEO – Przepisywanie rekordów za pomocą INSERT INTO … SELECT” w kursie „PostgreSQL dla początkujących” dostępnym na platformie Udemy. Na stronie:
znajdziesz aktualne kupony zniżkowe na ten kurs. Zapraszam!