PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como usar a localização física das linhas (ROWID) em uma instrução DELETE


No PostgreSQL, a localização física da linha é chamada CTID.

Então, se você quiser visualizá-lo, use uma QUERY como esta:
SELECT CTID FROM table_name

Para usá-lo em uma instrução DELETE para remover os registros duplicados, use-o assim:
DELETE FROM table_name WHERE CTID NOT IN (
  SELECT RECID FROM 
    (SELECT MIN(CTID) AS RECID, other_columns 
      FROM table_name GROUP BY other_columns) 
  a);

Lembre-se de que table_name é a tabela desejada e other_columns são as colunas que você deseja usar para filtrar isso.

Ou seja:
DELETE FROM user_department WHERE CTID NOT IN (
  SELECT RECID FROM 
    (SELECT MIN(CTID) AS RECID, ud.user_id, ud.department_id
      FROM user_department ud GROUP BY ud.user_id, ud.department_id) 
  a);