From select to delete - Mailing list pgsql-general
| From | Alexander Farber |
|---|---|
| Subject | From select to delete |
| Date | |
| Msg-id | CAADeyWimEXm6Uj3xrPBWorQ5D7uzPoeysUuhqkf6Ccrn4-_J4A@mail.gmail.com Whole thread |
| Responses |
Re: From select to delete
Re: From select to delete |
| List | pgsql-general |
Hello,
in PostgreSQL 8.4.9 I'm able to
select all games and his partners by a player id:
# select * from pref_scores s1
join pref_scores s2 using(gid)
join pref_games g using(gid)
where s1.id='OK531282114947';
gid | id | money | quit | id | money |
quit | rounds | finished
------+----------------+-------+------+---------------------+-------+------+--------+----------------------------
321 | OK531282114947 | 218 | f | OK531282114947 | 218 |
f | 17 | 2011-10-26 17:16:04.074402
321 | OK531282114947 | 218 | f | OK501857527071 | -156 |
f | 17 | 2011-10-26 17:16:04.074402
321 | OK531282114947 | 218 | f | OK429671947957 | -62 |
f | 17 | 2011-10-26 17:16:04.074402
1665 | OK531282114947 | 35 | f | OK356310219480 | 433 |
f | 37 | 2011-10-27 09:37:15.702893
1665 | OK531282114947 | 35 | f | VK670840 | -469 |
f | 37 | 2011-10-27 09:37:15.702893
1665 | OK531282114947 | 35 | f | OK531282114947 | 35 |
f | 37 | 2011-10-27 09:37:15.702893
But simple replacing of "select *" by "delete"
doesn't work here anymore.
Is there maybe an easy way to delete that player
(and all his games and partners) or
do I have to work with temp tables?
This is a table holding all games:
# select * from pref_games where gid=321;
gid | rounds | finished
-----+--------+----------------------------
321 | 17 | 2011-10-26 17:16:04.074402
(1 row)
This are scores reached by 3 players in that game:
# select * from pref_scores where gid=321;
id | gid | money | quit
----------------+-----+-------+------
OK531282114947 | 321 | 218 | f
OK501857527071 | 321 | -156 | f
OK429671947957 | 321 | -62 | f
I'd need to clean all tables when deleting a user:
create or replace function pref_delete_user(_id varchar)
returns void as $BODY$
begin
/* XXX this won't work of course */
delete from pref_scores s1
join pref_scores s2 using(gid)
join pref_games g using(gid)
where s1.id=_id;
delete from pref_rep where author=_id;
delete from pref_rep where id=_id;
delete from pref_catch where id=_id;
delete from pref_game where id=_id;
delete from pref_hand where id=_id;
delete from pref_luck where id=_id;
delete from pref_match where id=_id;
delete from pref_misere where id=_id;
delete from pref_money where id=_id;
delete from pref_pass where id=_id;
delete from pref_status where id=_id;
delete from pref_users where id=_id;
end;
$BODY$ language plpgsql;
Thank you for any hints
Alex
pgsql-general by date: