čt 25. 2. 2021 v 14:36 odesílatel Alexander Farber <
alexander.far...@gmail.com> napsal:
> Hi Pavel,
>
> trying to follow your advice "You should check so all foreign keys have an
> index" I look at the table where I want to delete older records:
>
> # \d words_games
>                                       Table "public.words_games"
>   Column  |           Type           | Collation | Nullable |
>    Default
>
> ----------+--------------------------+-----------+----------+------------------------------------------
>  gid      | integer                  |           | not null |
> nextval('words_games_gid_seq'::regclass)
>  created  | timestamp with time zone |           | not null |
>  finished | timestamp with time zone |           |          |
>  player1  | integer                  |           | not null |
>  player2  | integer                  |           |          |
>  played1  | timestamp with time zone |           |          |
>  played2  | timestamp with time zone |           |          |
>  state1   | text                     |           |          |
>  state2   | text                     |           |          |
>  reason   | text                     |           |          |
>  hint1    | text                     |           |          |
>  hint2    | text                     |           |          |
>  score1   | integer                  |           | not null |
>  score2   | integer                  |           | not null |
>  chat1    | integer                  |           | not null |
>  chat2    | integer                  |           | not null |
>  hand1    | character(1)[]           |           | not null |
>  hand2    | character(1)[]           |           | not null |
>  pile     | character(1)[]           |           | not null |
>  letters  | character(1)[]           |           | not null |
>  values   | integer[]                |           | not null |
>  bid      | integer                  |           | not null |
>  diff1    | integer                  |           |          |
>  diff2    | integer                  |           |          |
>  open1    | boolean                  |           | not null | false
>  open2    | boolean                  |           | not null | false
> Indexes:
>     "words_games_pkey" PRIMARY KEY, btree (gid)
>     "words_games_created_idx" btree (created)
>     "words_games_player1_coalesce_idx" btree (player1, COALESCE(finished,
> 'infinity'::timestamp with time zone))
>     "words_games_player2_coalesce_idx" btree (player2, COALESCE(finished,
> 'infinity'::timestamp with time zone))
> Check constraints:
>     "words_games_chat1_check" CHECK (chat1 >= 0)
>     "words_games_chat2_check" CHECK (chat2 >= 0)
>     "words_games_check" CHECK (player1 <> player2)
>     "words_games_score1_check" CHECK (score1 >= 0)
>     "words_games_score2_check" CHECK (score2 >= 0)
> Foreign-key constraints:
>     "words_games_bid_fkey" FOREIGN KEY (bid) REFERENCES words_boards(bid)
> ON DELETE CASCADE
>     "words_games_player1_fkey" FOREIGN KEY (player1) REFERENCES
> words_users(uid) ON DELETE CASCADE
>     "words_games_player2_fkey" FOREIGN KEY (player2) REFERENCES
> words_users(uid) ON DELETE CASCADE
> Referenced by:
>     TABLE "words_chat" CONSTRAINT "words_chat_gid_fkey" FOREIGN KEY (gid)
> REFERENCES words_games(gid) ON DELETE CASCADE
>     TABLE "words_moves" CONSTRAINT "words_moves_gid_fkey" FOREIGN KEY
> (gid) REFERENCES words_games(gid) ON DELETE CASCADE
>     TABLE "words_scores" CONSTRAINT "words_scores_gid_fkey" FOREIGN KEY
> (gid) REFERENCES words_games(gid) ON DELETE CASCADE
>
> You are probably talking about the section:
>
> Foreign-key constraints:
>     "words_games_bid_fkey" FOREIGN KEY (bid) REFERENCES words_boards(bid)
> ON DELETE CASCADE
>     "words_games_player1_fkey" FOREIGN KEY (player1) REFERENCES
> words_users(uid) ON DELETE CASCADE
>     "words_games_player2_fkey" FOREIGN KEY (player2) REFERENCES
> words_users(uid) ON DELETE CASCADE
>
> The first table words_boards only has 4 records, so I ignore it.
>
> The second table words_users already has an index on the uid, because that
> column is the primary key:
>
> #  \d words_users
>                                         Table "public.words_users"
>    Column    |           Type           | Collation | Nullable |
>        Default
>
> -------------+--------------------------+-----------+----------+------------------------------------------
>  uid         | integer                  |           | not null |
> nextval('words_users_uid_seq'::regclass)
>  created     | timestamp with time zone |           | not null |
>  visited     | timestamp with time zone |           | not null |
>  ip          | inet                     |           | not null |
>  fcm         | text                     |           |          |
>  apns        | text                     |           |          |
>  adm         | text                     |           |          |
>  motto       | text                     |           |          |
>  vip_until   | timestamp with time zone |           |          |
>  grand_until | timestamp with time zone |           |          |
>  elo         | integer                  |           | not null |
>  medals      | integer                  |           | not null |
>  coins       | integer                  |           | not null |
>  avg_score   | double precision         |           |          |
>  avg_time    | interval                 |           |          |
>  hms         | text                     |           |          |
>  removed     | boolean                  |           | not null | false
>  muted       | boolean                  |           | not null | false
> Indexes:
>     "words_users_pkey" PRIMARY KEY, btree (uid)
> Check constraints:
>     "words_users_elo_check" CHECK (elo >= 0)
>     "words_users_medals_check" CHECK (medals >= 0)
> Referenced by:
>     TABLE "words_chat" CONSTRAINT "words_chat_uid_fkey" FOREIGN KEY (uid)
> REFERENCES words_users(uid) ON DELETE CASCADE
>     TABLE "words_games" CONSTRAINT "words_games_player1_fkey" FOREIGN KEY
> (player1) REFERENCES words_users(uid) ON DELETE CASCADE
>     TABLE "words_games" CONSTRAINT "words_games_player2_fkey" FOREIGN KEY
> (player2) REFERENCES words_users(uid) ON DELETE CASCADE
>     TABLE "words_moves" CONSTRAINT "words_moves_uid_fkey" FOREIGN KEY
> (uid) REFERENCES words_users(uid) ON DELETE CASCADE
>     TABLE "words_puzzles" CONSTRAINT "words_puzzles_uid_fkey" FOREIGN KEY
> (uid) REFERENCES words_users(uid) ON DELETE CASCADE
>     TABLE "words_reviews" CONSTRAINT "words_reviews_author_fkey" FOREIGN
> KEY (author) REFERENCES words_users(uid) ON DELETE CASCADE
>     TABLE "words_reviews" CONSTRAINT "words_reviews_uid_fkey" FOREIGN KEY
> (uid) REFERENCES words_users(uid) ON DELETE CASCADE
>     TABLE "words_scores" CONSTRAINT "words_scores_uid_fkey" FOREIGN KEY
> (uid) REFERENCES words_users(uid) ON DELETE CASCADE
>     TABLE "words_social" CONSTRAINT "words_social_uid_fkey" FOREIGN KEY
> (uid) REFERENCES words_users(uid) ON DELETE CASCADE
>     TABLE "words_stats" CONSTRAINT "words_stats_uid_fkey" FOREIGN KEY
> (uid) REFERENCES words_users(uid) ON DELETE CASCADE
>
> Or do I misunderstand something?
>
> If someone would be interested to take a look at the real database, I
> would anonymize it and provide download
>

It is Linux or Windows?
is possible ssh access?



Pavel


> 1 477 210 374 Feb 25 12:04 words_ru-Feb.sql.gz
>
> However I understand that this is a lot to ask and am already thankful for
> any input :-)
>
> Thanks
> Alex
>
>

Reply via email to