Re: [pgbr-geral] Delete ou Update em dois registros identicos

2017-10-16 Por tôpico Michel Luiz Milezzi
Edelson, neste caso você deve usar a localização física dos registros
(coluna implícita ctid).

https://www.postgresql.org/docs/current/static/ddl-system-columns.html

Em 16 de outubro de 2017 15:51, Danilo Silva 
escreveu:

>
>
> Danilo Gomes
>
> Em 16 de outubro de 2017 15:32, Edelson Regis de Lima 
> escreveu:
>
>> Olá Flávio.
>>
>> Mas com esse exemplo você está supondo que na tabela exista o campo "id"
>> que seria uma chave única, correto?
>> O problema é que nessa tabela que mencionei não sei porque raios não
>> existe essa chave única. Tem um campo id, auto incremento, que seria essa
>> chave única, mas não sei como o sistema conseguiu inserir dois registros
>> identicos, inclusive o valor do id...
>> Então eu teria que ver se dá para identificar de outra maneira, pela
>> posição física do registro, sei lá...
>> Não sei se isso é possível... rs
>>
>> ​Você tem duas opções:
> a) se a tabela possuir o campo OID (essa coluna normalmente fica
> invisível, depende do método de criação da tabela), você pode deletar por
> esse registro, exemplo: SELECT OID, col_a,
> col_
> ​b FROM tabela, e depois deletar: DELETE FROM tabela WHERE (OID = ?)
>
> b) se a tabela não for muito grande, você pode adicionar uma nova coluna
> com ​
> ​
>
> ​o tipo sendo serial: ALTER TABLE tabela ADD COLUMN cod_delete serial. Com
> isso você consegue deletar através do código dessa coluna.
>
> []s
> Danilo​
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Delete ou Update em dois registros identicos

2017-10-16 Por tôpico Danilo Silva
Danilo Gomes

Em 16 de outubro de 2017 15:32, Edelson Regis de Lima 
escreveu:

> Olá Flávio.
>
> Mas com esse exemplo você está supondo que na tabela exista o campo "id"
> que seria uma chave única, correto?
> O problema é que nessa tabela que mencionei não sei porque raios não
> existe essa chave única. Tem um campo id, auto incremento, que seria essa
> chave única, mas não sei como o sistema conseguiu inserir dois registros
> identicos, inclusive o valor do id...
> Então eu teria que ver se dá para identificar de outra maneira, pela
> posição física do registro, sei lá...
> Não sei se isso é possível... rs
>
> ​Você tem duas opções:
a) se a tabela possuir o campo OID (essa coluna normalmente fica invisível,
depende do método de criação da tabela), você pode deletar por esse
registro, exemplo: SELECT OID, col_a,
col_
​b FROM tabela, e depois deletar: DELETE FROM tabela WHERE (OID = ?)

b) se a tabela não for muito grande, você pode adicionar uma nova coluna
com ​
​

​o tipo sendo serial: ALTER TABLE tabela ADD COLUMN cod_delete serial. Com
isso você consegue deletar através do código dessa coluna.

[]s
Danilo​
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Delete ou Update em dois registros identicos

2017-10-16 Por tôpico Edelson Regis de Lima
Olá Flávio.

Mas com esse exemplo você está supondo que na tabela exista o campo "id"
que seria uma chave única, correto?
O problema é que nessa tabela que mencionei não sei porque raios não existe
essa chave única. Tem um campo id, auto incremento, que seria essa chave
única, mas não sei como o sistema conseguiu inserir dois registros
identicos, inclusive o valor do id...
Então eu teria que ver se dá para identificar de outra maneira, pela
posição física do registro, sei lá...
Não sei se isso é possível... rs

-- 
*Edelson Regis de Lima*


Em 16 de outubro de 2017 12:14, Flavio Henrique Araque Gurgel <
fha...@gmail.com> escreveu:

>
>
> Em seg, 16 de out de 2017 às 17:03, Edelson Regis de Lima <
> edre...@gmail.com> escreveu:
>
>> Olá pessoal.
>>
>> To com um problema que não sei se tem solução...
>>
>> Tem um cliente que tem um banco de dados com uma tabela com dois
>> registros identicos, e preciso dar um update ou um delete em um dos
>> registros, porém como todos os campos são iguais, ainda não achei uma
>> solução.
>>
>> Exmplo: tenho a minha_tabela, com as colunas col_a e col_b. Nessa tabela
>> tem dois registros identicos:
>>
>> col_a | col_B
>>
>> aaa | bbb
>>
>> aaa | bbb
>>
>> Eu gostaria de apagar a linha dois por exemplo, ou dar um update mudando
>> as informações para ccc | ddd.
>>
>> Já vi o uso do ROW_NUMBER () OVER (ORDER BY id), porém só achei exemplos
>> que funcionasse com o SELECT.
>>
>> Já tentei:
>>
>> UPDATE minha_tabela SET col_a = 'ccc', col_b = 'ddd' where col_a = 'aaa'
>> and col_b = 'bbb' and ROW_NUMBER () OVER (ORDER BY id) = 2;
>>
>> Porém dá: ERROR:  cannot use window function in UPDATE
>>
>> Alguém teria uma solução?
>>
> Tente com uma CTE:
>
> WITH results_to_delete AS
> ( SELECT max(id) AS id_to_delete,  col_a, col_b FROM sua_tabela HAVING
> count(id) > 1 GROUP BY 2, 3)
> DELETE FROM sua_tabela USING results_to_delete WHERE id = id_to_delete;
>
> Note que não testei isto, então, pode ter erro de sintaxe ou mesmo de
> semântica se não entendi bem seu problema.
> Teste antes numa cópia do banco de dados ou da tabela, ou utilise uma
> transação para que possa fazer rollback em caso de erro.
>
> []s
> Flavio Gurgel
>
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Delete ou Update em dois registros identicos

2017-10-16 Por tôpico Flavio Henrique Araque Gurgel
Em seg, 16 de out de 2017 às 17:14, Flavio Henrique Araque Gurgel <
fha...@gmail.com> escreveu:

> Em seg, 16 de out de 2017 às 17:03, Edelson Regis de Lima <
> edre...@gmail.com> escreveu:
>
>> Olá pessoal.
>>
>> To com um problema que não sei se tem solução...
>>
>> Tem um cliente que tem um banco de dados com uma tabela com dois
>> registros identicos, e preciso dar um update ou um delete em um dos
>> registros, porém como todos os campos são iguais, ainda não achei uma
>> solução.
>>
>> Exmplo: tenho a minha_tabela, com as colunas col_a e col_b. Nessa tabela
>> tem dois registros identicos:
>>
>> col_a | col_B
>>
>> aaa | bbb
>>
>> aaa | bbb
>>
>> Eu gostaria de apagar a linha dois por exemplo, ou dar um update mudando
>> as informações para ccc | ddd.
>>
>> Já vi o uso do ROW_NUMBER () OVER (ORDER BY id), porém só achei exemplos
>> que funcionasse com o SELECT.
>>
>> Já tentei:
>>
>> UPDATE minha_tabela SET col_a = 'ccc', col_b = 'ddd' where col_a = 'aaa'
>> and col_b = 'bbb' and ROW_NUMBER () OVER (ORDER BY id) = 2;
>>
>> Porém dá: ERROR:  cannot use window function in UPDATE
>>
>> Alguém teria uma solução?
>>
> Tente com uma CTE:
>
> WITH results_to_delete AS
> ( SELECT max(id) AS id_to_delete,  col_a, col_b FROM sua_tabela HAVING
> count(id) > 1 GROUP BY 2, 3)
> DELETE FROM sua_tabela USING results_to_delete WHERE id = id_to_delete;
>

Esqueci de dizer, você pode mudar a parte do DELETE para UPDATE se
preferir, tente re-escrever com a lógica que deseja.

[]s
Flavio Gurgel
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Delete ou Update em dois registros identicos

2017-10-16 Por tôpico Flavio Henrique Araque Gurgel
Em seg, 16 de out de 2017 às 17:03, Edelson Regis de Lima 
escreveu:

> Olá pessoal.
>
> To com um problema que não sei se tem solução...
>
> Tem um cliente que tem um banco de dados com uma tabela com dois registros
> identicos, e preciso dar um update ou um delete em um dos registros, porém
> como todos os campos são iguais, ainda não achei uma solução.
>
> Exmplo: tenho a minha_tabela, com as colunas col_a e col_b. Nessa tabela
> tem dois registros identicos:
>
> col_a | col_B
>
> aaa | bbb
>
> aaa | bbb
>
> Eu gostaria de apagar a linha dois por exemplo, ou dar um update mudando
> as informações para ccc | ddd.
>
> Já vi o uso do ROW_NUMBER () OVER (ORDER BY id), porém só achei exemplos
> que funcionasse com o SELECT.
>
> Já tentei:
>
> UPDATE minha_tabela SET col_a = 'ccc', col_b = 'ddd' where col_a = 'aaa'
> and col_b = 'bbb' and ROW_NUMBER () OVER (ORDER BY id) = 2;
>
> Porém dá: ERROR:  cannot use window function in UPDATE
>
> Alguém teria uma solução?
>
Tente com uma CTE:

WITH results_to_delete AS
( SELECT max(id) AS id_to_delete,  col_a, col_b FROM sua_tabela HAVING
count(id) > 1 GROUP BY 2, 3)
DELETE FROM sua_tabela USING results_to_delete WHERE id = id_to_delete;

Note que não testei isto, então, pode ter erro de sintaxe ou mesmo de
semântica se não entendi bem seu problema.
Teste antes numa cópia do banco de dados ou da tabela, ou utilise uma
transação para que possa fazer rollback em caso de erro.

[]s
Flavio Gurgel
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

[pgbr-geral] Delete ou Update em dois registros identicos

2017-10-16 Por tôpico Edelson Regis de Lima
Olá pessoal.

To com um problema que não sei se tem solução...

Tem um cliente que tem um banco de dados com uma tabela com dois registros
identicos, e preciso dar um update ou um delete em um dos registros, porém
como todos os campos são iguais, ainda não achei uma solução.

Exmplo: tenho a minha_tabela, com as colunas col_a e col_b. Nessa tabela
tem dois registros identicos:

col_a | col_B

aaa | bbb

aaa | bbb

Eu gostaria de apagar a linha dois por exemplo, ou dar um update mudando as
informações para ccc | ddd.

Já vi o uso do ROW_NUMBER () OVER (ORDER BY id), porém só achei exemplos
que funcionasse com o SELECT.

Já tentei:

UPDATE minha_tabela SET col_a = 'ccc', col_b = 'ddd' where col_a = 'aaa'
and col_b = 'bbb' and ROW_NUMBER () OVER (ORDER BY id) = 2;

Porém dá: ERROR:  cannot use window function in UPDATE

Alguém teria uma solução?

Agradeço desde já!

-- 
*Edelson Regis de Lima*
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral