PostgreSQL: Przepisanie rekordów z tabeli do niej samej

19-paź-2022

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:

www.kursyonline24.eu

znajdziesz aktualne kupony zniżkowe na ten kurs. Zapraszam!

Komentarze są wyłączone

Autor: Rafał Kraik