Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка работает, а удаление нет. (Операция с датами) / 7 сообщений из 7, страница 1 из 1
02.12.2006, 02:21
    #34172094
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка работает, а удаление нет. (Операция с датами)
Не пойму. Почему вот такой запрос отрабатывает (я вижу строки)
Код: plaintext
select * from users where (regdate + '7 days')<now() and user_status=- 2 

А если я хочу удалить их
Код: plaintext
delete from users where (regdate + '7 days')<now() and user_status=- 2 
то ничего не происходит.

regdate timestamp
user_status int2

Кстати, как в pgAdmin увидеть - почему запрос не отработал. Вижу только ошибки. В данном случае их нет. Но ведь он не отрабатывает. Даже не пишет, что удалено 0 строк.
...
Рейтинг: 0 / 0
02.12.2006, 09:21
    #34172174
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка работает, а удаление нет. (Операция с датами)
У users есть триггеры? Или вообще триггеры каким-то образом связанные в users.
...
Рейтинг: 0 / 0
02.12.2006, 11:23
    #34172242
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка работает, а удаление нет. (Операция с датами)
Нет, триггеров и правил нет.
Я был не прав, что указав в заголовке "операция с датами" не указал в тексте, что, например, по id записи удаляются. Поэтому-то я и решил, что проблема где-то в преобразованиях дат и интервалов.
Вот такое удаление работает

Код: plaintext
delete from users where id= 38  and user_status=- 2 
...
Рейтинг: 0 / 0
02.12.2006, 20:37
    #34172614
Jelis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка работает, а удаление нет. (Операция с датами)
Может users это представление а не таблица? Вообще не плохо посмотреть \d users в psql.

Попробуйте, вместо now(), конкретную дату. Ведь now() в селекте это немного не то(самую малость, но все же), что now() в делейте через 20 секунд.

Попробуйте селект и делейт cделать в одной транзакции. Типа
Код: plaintext
1.
2.
3.
4.
5.
begin;
select .... ;
delete ... ;
select ... ;
commit;

И посмотреть будет ли последний селект тоже что-то выдавать. И в место now() в транзакции используйте current_timestamp - их поведение немного отличаеться. А лучше просто, руками, указывайте конкретную датувремя (что б наверняка).

Попробуйте закастить всё.
...
Рейтинг: 0 / 0
02.12.2006, 21:01
    #34172630
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка работает, а удаление нет. (Операция с датами)
Я думаю что проблемма в том что date + interval = timestamp, а now() - timestampz.
Попробуйте так
Код: plaintext
delete from users where (regdate + '7 days')<now()::timestamp and user_status=- 2 
...
Рейтинг: 0 / 0
02.12.2006, 21:30
    #34172643
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка работает, а удаление нет. (Операция с датами)
Только что проверил у себя, проблемм не возникло.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
select version();
 version(text)
-----------------------------------------------------
PostgreSQL  8 . 1 . 3  on i686-pc-mingw32,
 compiled by GCC gcc.exe (GCC)  3 . 4 . 2  (mingw-special)

CREATE TABLE test
(
  date date NOT NULL,
  status int2 NOT NULL,
  PRIMARY KEY (date, status)
);

insert into test values ('2006-10-12'::date, - 2 );
insert into test values ('2006-10-13'::date, - 2 );
insert into test values ('2006-10-14'::date, - 2 );
insert into test values ('2006-10-15'::date, - 2 );
insert into test values ('2006-11-29'::date, - 2 );

select * from test;

 date (date) | status (int2)
-------------+---------------
  2006 - 10 - 12   | - 2 
  2006 - 10 - 13   | - 2 
  2006 - 10 - 14   | - 2 
  2006 - 10 - 15   | - 2 
  2006 - 11 - 29   | - 2 

delete from test where (date + '7 day'::interval) < now() and status=- 2 ; 

select * from test;

 date (date) | status (int2)
-------------+---------------
  2006 - 11 - 29   | - 2 
...
Рейтинг: 0 / 0
02.12.2006, 22:17
    #34172670
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка работает, а удаление нет. (Операция с датами)
Господа, убейте меня об стену :о(

вот так сработало
Код: plaintext
delete from users where (regdate + '7 days')<current_timestamp and user_status=- 2  and id!= 34 ;
Сейчас объясню почему.

На таблицу есть внешний ключ из другой таблицы. На боевой базе в той таблице не может быть записей от юзеров со статусом -2 (не активированы), но на тестовой одна запись от юзера 34 оказалась. Она-то все и портила - ломался внешний ключ
НО! Почему я не видел никакого сообщения об ошибке? В оракле была бы какая-нибудь ORA-... (не помню номера конечно)
Как здесь в pgAdmin увидеть что-то подобное. Ведь что-то должна была сообщить база, а не тихо сломаться...
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка работает, а удаление нет. (Операция с датами) / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]