Postgresql строка скрывается после обновления, не могу ее выбрать - PullRequest
0 голосов
/ 25 мая 2020

У меня проблема, когда мои строки «скрываются» (или SELECT * не извлекает их) после обновления.

Я пробовал использовать CLI и GUI (DBeaver), но результат тот же, вот пример:

select * from users limit 4;
 id |             email              |    password     |  status  |  role  |         created_at         |         updated_at         
----+--------------------------------+-----------------+----------+--------+----------------------------+----------------------------
  8 | Brad.Bailey@gmail.com          | qYHsmrKWaiaiZxI | disabled | seller | 2019-09-06 21:43:08.043-03 | 2019-08-13 16:04:25.233-03
  9 | Marcelino_Prohaska97@gmail.com | sUMuOM_gXCPxz19 | disabled | seller | 2019-06-14 15:39:45.447-03 | 2019-06-25 12:54:01.023-03
 10 | Gino_Blick@gmail.com           | iOkZQhc7JSsQcpY | disabled | seller | 2020-02-13 13:39:16.26-03  | 2019-12-18 17:02:37.938-03
 11 | Tiffany.Schuster16@yahoo.com   | Bw2OhPUtIRcWxZF | active   | seller | 2018-07-30 08:01:29.942-03 | 2019-09-03 10:50:40.314-03
(4 rows)

Тогда

update users set email = 'test@test.com' where id = 8;
UPDATE 1

А потом происходит следующее:

select * from users limit 4;
 id |             email              |    password     |  status  |  role  |         created_at         |         updated_at         
----+--------------------------------+-----------------+----------+--------+----------------------------+----------------------------
  9 | Marcelino_Prohaska97@gmail.com | sUMuOM_gXCPxz19 | disabled | seller | 2019-06-14 15:39:45.447-03 | 2019-06-25 12:54:01.023-03
 10 | Gino_Blick@gmail.com           | iOkZQhc7JSsQcpY | disabled | seller | 2020-02-13 13:39:16.26-03  | 2019-12-18 17:02:37.938-03
 11 | Tiffany.Schuster16@yahoo.com   | Bw2OhPUtIRcWxZF | active   | seller | 2018-07-30 08:01:29.942-03 | 2019-09-03 10:50:40.314-03
 12 | Brody_Pollich@yahoo.com        | ZlFy3kEUSrmxHAa | disabled | seller | 2018-07-06 13:18:29.936-03 | 2019-08-03 21:46:22.296-03
(4 rows)

Дело в том, что строка все еще существует, но не отображается с помощью SELECT *

select * from users where id = 8 limit 10;
 id |     email     |    password     |  status  |  role  |         created_at         |         updated_at         
----+---------------+-----------------+----------+--------+----------------------------+----------------------------
  8 | test@test.com | qYHsmrKWaiaiZxI | disabled | seller | 2019-09-06 21:43:08.043-03 | 2019-08-13 16:04:25.233-03
(1 row)

Вот структура моей таблицы (код от Dbeaver) и версия моего Postgresql:

CREATE TABLE public.users (
    id serial NOT NULL,
    email varchar(255) NOT NULL,
    "password" varchar(255) NOT NULL,
    status varchar(255) NOT NULL,
    "role" varchar(255) NOT NULL,
    created_at timestamptz NOT NULL,
    updated_at timestamptz NOT NULL,
    CONSTRAINT users_email_unique UNIQUE (email),
    CONSTRAINT users_pkey PRIMARY KEY (id)
);

SELECT version();
                                                             version                                                             
-------------------------------------------------------------------------------------------- 
-------------------------------------
PostgreSQL 12.3 (Ubuntu 12.3-1.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit
(1 row)

Спасибо.

1 Ответ

1 голос
/ 25 мая 2020

Удалить limit и применить order by:

select * from users order by id;

Возврат ID = 8?

В документации указано:

Потому что порядок строки в таблице базы данных не указаны, при использовании предложения LIMIT всегда следует использовать предложение ORDER BY для управления порядком строк. Если вы этого не сделаете, вы получите набор результатов, строки которого расположены в неопределенном порядке.

, что означает, что вы случайно увидели запись с ID = 8 ; нет гарантии, что вы получите его снова, только с оговоркой limit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...