Powiedzmy, że aplikacja ma tabelę służącą do przechowywania uprawnień o następującej strukturze:
1 2 3 4 5 6 7 |
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:
1 2 3 4 5 6 7 8 9 10 |
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:
1 |
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):
1 2 |
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:
1 |
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!