大家好。
我在将备份恢复到我的 discourse 服务器时遇到问题。我尝试过发布日志文件,但它不允许新用户上传文件,当我尝试在此线程中发布代码时,它说有 400k 行,只允许 100k 行。任何帮助都将不胜感激!
大家好。
我在将备份恢复到我的 discourse 服务器时遇到问题。我尝试过发布日志文件,但它不允许新用户上传文件,当我尝试在此线程中发布代码时,它说有 400k 行,只允许 100k 行。任何帮助都将不胜感激!
如果您无法全部发布,您将需要尝试猜测要点是什么,可能在最后。
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon FROM (VALUES ('adjust', 'circle-half-stroke'), ('air-freshener', 'spray-can-sparkles'), ('alien-monster', 'alien-8bit'), ('allergies', 'hand-dots'), ('ambulance', 'truck-medical'), ('american-sign-language-interpreting', 'hands-asl-interpreting'), ('analytics', 'chart-mixed'), ('angle-double-down', 'angles-down'), ('angle-double-left', 'angles-left'), ('angle-double-right', 'angles-right'), ('angle-double-up', 'angles-up'), ('angry', 'face-angry'), ('apple-alt', 'apple-whole'), ('apple-crate', 'crate-apple'), ('archive', 'box-archive'), ('arrow-alt-circle-down', 'circle-down'), ('arrow-alt-circle-left', 'circle-left'), ('arrow-alt-circle-right', 'circle-right'), ('arrow-alt-circle-up', 'circle-up'), ('arrow-alt-down', 'down'), ('arrow-alt-from-bottom', 'up-from-line'), ('arrow-alt-from-left', 'right-from-line'), ('arrow-alt-from-right', 'left-from-line'), ('arrow-alt-from-top', 'down-from-line'), ('arrow-alt-left', 'left'), ('arrow-alt-right', 'right'), ('arrow-alt-square-down', 'square-down'), ('arrow-alt-square-left', 'square-left'), ('arrow-alt-square-right', 'square-right'), ('arrow-alt-square-up', 'square-up'), ('arrow-alt-to-bottom', 'down-to-line'), ('arrow-alt-to-left', 'left-to-line'), ('arrow-alt-to-right', 'right-to-line'), ('arrow-alt-to-top', 'up-to-line'), ('arrow-alt-up', 'up'), ('arrow-circle-down', 'circle-arrow-down'), ('arrow-circle-left', 'circle-arrow-left'), ('arrow-circle-right', 'circle-arrow-right'), ('arrow-circle-up', 'circle-arrow-up'), ('arrow-from-bottom', 'arrow-up-from-line'), ('arrow-from-left', 'arrow-right-from-line'), ('arrow-from-right', 'arrow-left-from-line'), ('arrow-from-top', 'arrow-down-from-line'), ('arrow-square-down', 'square-arrow-down'), ('arrow-square-left', 'square-arrow-left'), ('arrow-square-right', 'square-arrow-right'), ('arrow-square-up', 'square-arrow-up'), ('arrow-to-bottom', 'arrow-down-to-line'), ('arrow-to-left', 'arrow-left-to-line'), ('arrow-to-right', 'arrow-right-to-line'), ('arrow-to-top', 'arrow-up-to-line'), ('arrows', 'arrows-up-down-left-right'), ('arrows-alt', 'up-down-left-right'), ('arrows-alt-h', 'left-right'), ('arrows-alt-v', 'up-down'), ('arrows-h', 'arrows-left-right'), ('arrows-v', 'arrows-up-down'), ('assistive-listening-systems', 'ear-listen'), ('atlas', 'book-atlas'), ('atom-alt', 'atom-simple'), ('backspace', 'delete-left'), ('balance-scale', 'scale-balanced'), ('balance-scale-left', 'scale-unbalanced'), ('balance-scale-right', 'scale-unbalanced-flip'), ('band-aid', 'bandage'), ('barcode-alt', 'rectangle-barcode'), ('baseball-ball', 'baseball'), ('basketball-ball', 'basketball'), ('bed-alt', 'bed-front'), ('beer', 'beer-mug-empty'), ('betamax', 'cassette-betamax'), ('bible', 'book-bible'), ('biking', 'person-biking'), ('biking-mountain', 'person-biking-mountain'), ('birthday-cake', 'cake-candles'), ('blind', 'person-walking-with-cane'), ('book-alt', 'book-blank'), ('book-dead', 'book-skull'), ('book-reader', 'book-open-reader'), ('book-spells', 'book-sparkles'), ('border-style', 'border-top-left'), ('border-style-alt', 'border-bottom-right'), ('box-alt', 'box-taped'), ('box-fragile', 'square-fragile'), ('box-full', 'box-open-full'), ('box-up', 'square-this-way-up'), ('box-usd', 'box-dollar'), ('boxes', 'boxes-stacked'), ('boxes-alt', 'boxes-stacked'), ('brackets', 'brackets-square'), ('broadcast-tower', 'tower-broadcast'), ('burn', 'fire-flame-simple'), ('bus-alt', 'bus-simple'), ('calculator-alt', 'calculator-simple'), ('calendar-alt', 'calendar-days'), ('calendar-edit', 'calendar-pen'), ('calendar-times', 'calendar-xmark'), ('camera-alt', 'camera'), ('camera-home', 'camera-security'), ('car-alt', 'car-rear'), ('car-crash', 'car-burst'), ('car-mechanic', 'car-wrench'), ('caravan-alt', 'caravan-simple'), ('caret-circle-down', 'circle-caret-down'), ('caret-circle-left', 'circle-caret-left'), ('caret-circle-right', 'circle-caret-right'), ('caret-circle-up', 'circle-caret-up'), ('caret-square-down', 'square-caret-down'), ('caret-square-left', 'square-caret-left'), ('caret-square-right', 'square-caret-right'), ('caret-square-up', 'square-caret-up'), ('cctv', 'camera-cctv'), ('chalkboard-teacher', 'chalkboard-user'), ('chart-pie-alt', 'chart-pie-simple'), ('check-circle', 'circle-check'), ('check-square', 'square-check'), ('cheeseburger', 'burger-cheese'), ('chess-bishop-alt', 'chess-bishop-piece'), ('chess-clock-alt', 'chess-clock-flip'), ('chess-king-alt', 'chess-king-piece'), ('chess-knight-alt', 'chess-knight-piece'), ('chess-pawn-alt', 'chess-pawn-piece'), ('chess-queen-alt', 'chess-queen-piece'), ('chess-rook-alt', 'chess-rook-piece'), ('chevron-circle-down', 'circle-chevron-down'), ('chevron-circle-left', 'circle-chevron-left'), ('chevron-circle-right', 'circle-chevron-right'), ('chevron-circle-up', 'circle-chevron-up'), ('chevron-double-down', 'chevrons-down'), ('chevron-double-left', 'chevrons-left'), ('chevron-double-right', 'chevrons-right'), ('chevron-double-up', 'chevrons-up'), ('chevron-square-down', 'square-chevron-down'), ('chevron-square-left', 'square-chevron-left'), ('chevron-square-right', 'square-chevron-right'), ('chevron-square-up', 'square-chevron-up'), ('clinic-medical', 'house-chimney-medical'), ('cloud-download', 'cloud-arrow-down'), ('cloud-download-alt', 'cloud-arrow-down'), ('cloud-upload', 'cloud-arrow-up'), ('cloud-upload-alt', 'cloud-arrow-up'), ('cocktail', 'martini-glass-citrus'), ('coffee', 'mug-saucer'), ('coffee-togo', 'cup-togo'), ('cog', 'gear'), ('cogs', 'gears'), ('columns', 'table-columns'), ('comment-alt', 'message'), ('comment-alt-check', 'message-check'), ('comment-alt-dollar', 'message-dollar'), ('comment-alt-dots', 'message-dots'), ('comment-alt-edit', 'message-pen'), ('comment-alt-exclamation', 'message-exclamation'), ('comment-alt-lines', 'message-lines'), ('comment-alt-medical', 'message-medical'), ('comment-alt-minus', 'message-minus'), ('comment-alt-music', 'message-music'), ('comment-alt-plus', 'message-plus'), ('comment-alt-slash', 'message-slash'), ('comment-alt-smile', 'message-smile'), ('comment-alt-times', 'message-xmark'), ('comment-edit', 'comment-pen'), ('comment-times', 'comment-xmark'), ('comments-alt', 'messages'), ('comments-alt-dollar', 'messages-dollar'), ('compress-alt', 'down-left-and-up-right-to-center'), ('compress-arrows-alt', 'minimize'), ('concierge-bell', 'bell-concierge'), ('construction', 'triangle-person-digging'), ('conveyor-belt-alt', 'conveyor-belt-boxes'), ('cowbell-more', 'cowbell-circle-plus'), ('cricket', 'cricket-bat-ball'), ('crop-alt', 'crop-simple'), ('curling', 'curling-stone'), ('cut', 'scissors'), ('deaf', 'ear-deaf'), ('debug', 'ban-bug'), ('desktop-alt', 'desktop'), ('dewpoint', 'droplet-degree'), ('diagnoses', 'person-dots-from-line'), ('digging', 'person-digging'), ('digital-tachograph', 'tachograph-digital'), ('directions', 'diamond-turn-right'), ('dizzy', 'face-dizzy'), ('dolly-flatbed', 'cart-flatbed'), ('dolly-flatbed-alt', 'cart-flatbed-boxes'), ('dolly-flatbed-empty', 'cart-flatbed-empty'), ('donate', 'circle-dollar-to-slot'), ('dot-circle', 'circle-dot'), ('drafting-compass', 'compass-drafting'), ('drone-alt', 'drone-front'), ('dryer-alt', 'dryer-heat'), ('eclipse-alt', 'moon-over-sun'), ('edit', 'pen-to-square'), ('ellipsis-h', 'ellipsis'), ('ellipsis-h-alt', 'ellipsis-stroke'), ('ellipsis-v', 'ellipsis-vertical'), ('ellipsis-v-alt', 'ellipsis-stroke-vertical'), ('envelope-square', 'square-envelope'), ('exchange', 'arrow-right-arrow-left'), ('exchange-alt', 'right-left'), ('exclamation-circle', 'circle-exclamation'), ('exclamation-square', 'square-exclamation'), ('exclamation-triangle', 'triangle-exclamation'), ('expand-alt', 'up-right-and-down-left-from-center'), ('expand-arrows', 'arrows-maximize'), ('expand-arrows-alt', 'maximize'), ('external-link', 'arrow-up-right-from-square'), ('external-link-alt', 'up-right-from-square'), ('external-link-square', 'square-arrow-up-right'), ('external-link-square-alt', 'square-up-right'), ('eyedropper', 'eye-dropper'), ('fast-backward', 'backward-fast'), ('fast-forward', 'forward-fast'), ('feather-alt', 'feather-pointed'), ('female', 'person-dress'), ('field-hockey', 'field-hockey-stick-ball'), ('fighter-jet', 'jet-fighter'), ('file-alt', 'file-lines'), ('file-archive', 'file-zipper'), ('file-chart-line', 'file-chart-column'), ('file-download', 'file-arrow-down'), ('file-edit', 'file-pen'), ('file-medical-alt', 'file-waveform'), ('file-search', 'file-magnifying-glass'), ('file-times', 'file-xmark'), ('file-upload', 'file-arrow-up'), ('film-alt', 'film-simple'), ('fire-alt', 'fire-flame-curved'), ('first-aid', 'kit-medical'), ('fist-raised', 'hand-fist'), ('flag-alt', 'flag-swallowtail'), ('flame', 'fire-flame'), ('flask-poison', 'flask-round-poison'), ('flask-potion', 'flask-round-potion'), ('flushed', 'face-flushed'), ('fog', 'cloud-fog'), ('folder-download', 'folder-arrow-down'), ('folder-times', 'folder-xmark'), ('folder-upload', 'folder-arrow-up'), ('font-awesome-alt', 'square-font-awesome-stroke'), ('font-awesome-flag', 'font-awesome'), ('font-awesome-logo-full', 'font-awesome'), ('football-ball', 'football'), ('fragile', 'wine-glass-crack'), ('frosty-head', 'snowman-head'), ('frown', 'face-frown'), ('frown-open', 'face-frown-open'), ('funnel-dollar', 'filter-circle-dollar'), ('game-board-alt', 'game-board-simple'), ('gamepad-alt', 'gamepad-modern'), ('glass-champagne', 'champagne-glass'), ('glass-cheers', 'champagne-glasses'), ('glass-martini', 'martini-glass-empty'), ('glass-martini-alt', 'martini-glass'), ('glass-whiskey', 'whiskey-glass'), ('glass-whiskey-rocks', 'whiskey-glass-ice'), ('glasses-alt', 'glasses-round'), ('globe-africa', 'earth-africa'), ('globe-americas', 'earth-americas'), ('globe-asia', 'earth-asia'), ('globe-europe', 'earth-europe'), ('golf-ball', 'golf-ball-tee'), ('grimace', 'face-grimace'), ('grin', 'face-grin'), ('grin-alt', 'face-grin-wide'), ('grin-beam', 'face-grin-beam'), ('grin-beam-sweat', 'face-grin-beam-sweat'), ('grin-hearts', 'face-grin-hearts'), ('grin-squint', 'face-grin-squint'), ('grin-squint-tears', 'face-grin-squint-tears'), ('grin-stars', 'face-grin-stars'), ('grin-tears', 'face-grin-tears'), ('grin-tongue', 'face-grin-tongue'), ('grin-tongue-squint', 'face-grin-tongue-squint'), ('grin-tongue-wink', 'face-grin-tongue-wink'), ('grin-wink', 'face-grin-wink'), ('grip-horizontal', 'grip'), ('h-square', 'square-h'), ('hamburger', 'burger'), ('hand-holding-usd', 'hand-holding-dollar'), ('hand-holding-water', 'hand-holding-droplet'), ('hand-paper', 'hand'), ('hand-receiving', 'hands-holding-diamond'), ('hand-rock', 'hand-back-fist'), ('hands-heart', 'hands-holding-heart'), ('hands-helping', 'handshake-angle'), ('hands-usd', 'hands-holding-dollar'), ('hands-wash', 'hands-bubbles'), ('handshake-alt', 'handshake-simple'), ('handshake-alt-slash', 'handshake-simple-slash'), ('hard-hat', 'helmet-safety'), ('hdd', 'hard-drive'), ('head-vr', 'head-side-goggles'), ('headphones-alt', 'headphones-simple'), ('heart-broken', 'heart-crack'), ('heart-circle', 'circle-heart'), ('heart-rate', 'wave-pulse'), ('heart-square', 'square-heart'), ('heartbeat', 'heart-pulse'), ('hiking', 'person-hiking'), ('history', 'clock-rotate-left'), ('home', 'house'), ('home-alt', 'house'), ('home-heart', 'house-heart'), ('home-lg', 'house-chimney'), ('home-lg-alt', 'house'), ('hospital-alt', 'hospital'), ('hospital-symbol', 'circle-h'), ('hot-tub', 'hot-tub-person'), ('hourglass-half', 'hourglass'), ('house-damage', 'house-chimney-crack'), ('house-leave', 'house-person-leave'), ('house-return', 'house-person-return'), ('hryvnia', 'hryvnia-sign'), ('humidity', 'droplet-percent'), ('icons-alt', 'symbols'), ('id-card-alt', 'id-card-clip'), ('industry-alt', 'industry-windows'), ('info-circle', 'circle-info'), ('info-square', 'square-info'), ('innosoft', '42-group'), ('inventory', 'shelves'), ('journal-whills', 'book-journal-whills'), ('kiss', 'face-kiss'), ('kiss-beam', 'face-kiss-beam'), ('kiss-wink-heart', 'face-kiss-wink-heart'), ('landmark-alt', 'landmark-dome'), ('laptop-house', 'house-laptop'), ('laugh', 'face-laugh'), ('laugh-beam', 'face-laugh-beam'), ('laugh-squint', 'face-laugh-squint'), ('laugh-wink', 'face-laugh-wink'), ('level-down', 'arrow-turn-down'), ('level-down-alt', 'turn-down'), ('level-up', 'arrow-turn-up'), ('level-up-alt', 'turn-up'), ('list-alt', 'rectangle-list'), ('location', 'location-crosshairs'), ('location-circle', 'circle-location-arrow'), ('location-slash', 'location-crosshairs-slash'), ('lock-alt', 'lock-keyhole'), ('lock-open-alt', 'lock-keyhole-open'), ('long-arrow-alt-down', 'down-long'), ('long-arrow-alt-left', 'left-long'), ('long-arrow-alt-right', 'right-long'), ('long-arrow-alt-up', 'up-long'), ('long-arrow-down', 'arrow-down-long'), ('long-arrow-left', 'arrow-left-long'), ('long-arrow-right', 'arrow-right-long'), ('long-arrow-up', 'arrow-up-long'), ('low-vision', 'eye-low-vision'), ('luchador', 'luchador-mask'), ('luggage-cart', 'cart-flatbed-suitcase'), ('magic', 'wand-magic'), ('mail-bulk', 'envelopes-bulk'), ('male', 'person'), ('map-marked', 'map-location'), ('map-marked-alt', 'map-location-dot'), ('map-marker', 'location-pin'), ('map-marker-alt', 'location-dot'), ('map-marker-alt-slash', 'location-dot-slash'), ('map-marker-check', 'location-check'), ('map-marker-edit', 'location-pen'), ('map-marker-exclamation', 'location-exclamation'), ('map-marker-minus', 'location-minus'), ('map-marker-plus', 'location-plus'), ('map-marker-question', 'location-question'), ('map-marker-slash', 'location-pin-slash'), ('map-marker-smile', 'location-smile'), ('map-marker-times', 'location-xmark'), ('map-signs', 'signs-post'), ('mars-stroke-h', 'mars-stroke-right'), ('mars-stroke-v', 'mars-stroke-up'), ('medium-m', 'medium'), ('medkit', 'suitcase-medical'), ('meh', 'face-meh'), ('meh-blank', 'face-meh-blank'), ('meh-rolling-eyes', 'face-rolling-eyes'), ('microphone-alt', 'microphone-lines'), ('microphone-alt-slash', 'microphone-lines-slash'), ('mind-share', 'brain-arrow-curved-right'), ('minus-circle', 'circle-minus'), ('minus-hexagon', 'hexagon-minus'), ('minus-octagon', 'octagon-minus'), ('minus-square', 'square-minus'), ('mobile-alt', 'mobile-screen-button'), ('mobile-android', 'mobile'), ('mobile-android-alt', 'mobile-screen'), ('money-bill-alt', 'money-bill-1'), ('money-bill-wave-alt', 'money-bill-1-wave'), ('money-check-alt', 'money-check-dollar'), ('money-check-edit', 'money-check-pen'), ('money-check-edit-alt', 'money-check-dollar-pen'), ('monitor-heart-rate', 'monitor-waveform'), ('mouse', 'computer-mouse'), ('mouse-alt', 'computer-mouse-scrollwheel'), ('mouse-pointer', 'arrow-pointer'), ('music-alt', 'music-note'), ('music-alt-slash', 'music-note-slash'), ('oil-temp', 'oil-temperature'), ('page-break', 'file-dashed-line'), ('paint-brush', 'paintbrush'), ('paint-brush-alt', 'paintbrush-fine'), ('paint-brush-fine', 'paintbrush-fine'), ('pallet-alt', 'pallet-boxes'), ('paragraph-rtl', 'paragraph-left'), ('parking', 'square-parking'), ('parking-circle', 'circle-parking'), ('parking-circle-slash', 'ban-parking'), ('parking-slash', 'square-parking-slash'), ('pastafarianism', 'spaghetti-monster-flying'), ('pause-circle', 'circle-pause'), ('paw-alt', 'paw-simple'), ('pen-alt', 'pen-clip'), ('pen-square', 'square-pen'), ('pencil-alt', 'pencil'), ('pencil-paintbrush', 'pen-paintbrush'), ('pencil-ruler', 'pen-ruler'), ('pennant', 'flag-pennant'), ('people-arrows', 'people-arrows-left-right'), ('people-carry', 'people-carry-box'), ('percentage', 'percent'), ('person-carry', 'person-carry-box'), ('phone-alt', 'phone-flip'), ('phone-laptop', 'laptop-mobile'), ('phone-square', 'square-phone'), ('phone-square-alt', 'square-phone-flip'), ('photo-video', 'photo-film'), ('plane-alt', 'plane-engines'), ('play-circle', 'circle-play'), ('plus-circle', 'circle-plus'), ('plus-hexagon', 'hexagon-plus'), ('plus-octagon', 'octagon-plus'), ('plus-square', 'square-plus'), ('poll', 'square-poll-vertical'), ('poll-h', 'square-poll-horizontal'), ('portal-enter', 'person-to-portal'), ('portal-exit', 'person-from-portal'), ('portrait', 'image-portrait'), ('pound-sign', 'sterling-sign'), ('pray', 'person-praying'), ('praying-hands', 'hands-praying'), ('prescription-bottle-alt', 'prescription-bottle-medical'), ('presentation', 'presentation-screen'), ('print-search', 'print-magnifying-glass'), ('procedures', 'bed-pulse'), ('project-diagram', 'diagram-project'), ('question-circle', 'circle-question'), ('question-square', 'square-question'), ('quran', 'book-quran'), ('rabbit-fast', 'rabbit-running'), ('radiation-alt', 'circle-radiation'), ('radio-alt', 'radio-tuner'), ('random', 'shuffle'), ('rectangle-landscape', 'rectangle'), ('rectangle-portrait', 'rectangle-vertical'), ('redo', 'arrow-rotate-right'), ('redo-alt', 'rotate-right'), ('remove-format', 'text-slash'), ('repeat-1-alt', 'arrows-repeat-1'), ('repeat-alt', 'arrows-repeat'), ('retweet-alt', 'arrows-retweet'), ('rss-square', 'square-rss'), ('running', 'person-running'), ('sad-cry', 'face-sad-cry'), ('sad-tear', 'face-sad-tear'), ('save', 'floppy-disk'), ('sax-hot', 'saxophone-fire'), ('scalpel-path', 'scalpel-line-dashed'), ('scanner-image', 'scanner'), ('search', 'magnifying-glass'), ('search-dollar', 'magnifying-glass-dollar'), ('search-location', 'magnifying-glass-location'), ('search-minus', 'magnifying-glass-minus'), ('search-plus', 'magnifying-glass-plus'), ('sensor-alert', 'sensor-triangle-exclamation'), ('sensor-smoke', 'sensor-cloud'), ('share-alt', 'share-nodes'), ('share-alt-square', 'square-share-nodes'), ('share-square', 'share-from-square'), ('shield-alt', 'shield-halved'), ('shipping-fast', 'truck-fast'), ('shipping-timed', 'truck-clock'), ('shopping-bag', 'bag-shopping'), ('shopping-basket', 'basket-shopping'), ('shopping-cart', 'cart-shopping'), ('shuttle-van', 'van-shuttle'), ('sign', 'sign-hanging'), ('sign-in', 'arrow-right-to-bracket'), ('sign-in-alt', 'right-to-bracket'), ('sign-language', 'hands'), ('sign-out', 'arrow-right-from-bracket'), ('sign-out-alt', 'right-from-bracket'), ('signal-1', 'signal-weak'), ('signal-2', 'signal-fair'), ('signal-3', 'signal-good'), ('signal-4', 'signal-strong'), ('signal-alt', 'signal-bars'), ('signal-alt-1', 'signal-bars-weak'), ('signal-alt-2', 'signal-bars-fair'), ('signal-alt-3', 'signal-bars-good'), ('signal-alt-slash', 'signal-bars-slash'), ('skating', 'person-skating'), ('ski-jump', 'person-ski-jumping'), ('ski-lift', 'person-ski-lift'), ('skiing', 'person-skiing'), ('skiing-nordic', 'person-skiing-nordic'), ('slack-hash', 'slack'), ('sledding', 'person-sledding'), ('sliders-h', 'sliders'), ('sliders-h-square', 'square-sliders'), ('sliders-v', 'sliders-up'), ('sliders-v-square', 'square-sliders-vertical'), ('smile', 'face-smile'), ('smile-beam', 'face-smile-beam'), ('smile-plus', 'face-smile-plus'), ('smile-wink', 'face-smile-wink'), ('smoking-ban', 'ban-smoking'), ('sms', 'comment-sms'), ('snapchat-ghost', 'snapchat'), ('snowboarding', 'person-snowboarding'), ('snowmobile', 'person-snowmobiling'), ('sort-alpha-down', 'arrow-down-a-z'), ('sort-alpha-down-alt', 'arrow-down-z-a'), ('sort-alpha-up', 'arrow-up-a-z'), ('sort-alpha-up-alt', 'arrow-up-z-a'), ('sort-alt', 'arrow-down-arrow-up'), ('sort-amount-down', 'arrow-down-wide-short'), ('sort-amount-down-alt', 'arrow-down-short-wide'), ('sort-amount-up', 'arrow-up-wide-short'), ('sort-amount-up-alt', 'arrow-up-short-wide'), ('sort-circle', 'circle-sort'), ('sort-circle-down', 'circle-sort-down'), ('sort-circle-up', 'circle-sort-up'), ('sort-numeric-down', 'arrow-down-1-9'), ('sort-numeric-down-alt', 'arrow-down-9-1'), ('sort-numeric-up', 'arrow-up-1-9'), ('sort-numeric-up-alt', 'arrow-up-9-1'), ('sort-shapes-down', 'arrow-down-triangle-square'), ('sort-shapes-down-alt', 'arrow-down-square-triangle'), ('sort-shapes-up', 'arrow-up-triangle-square'), ('sort-shapes-up-alt', 'arrow-up-square-triangle'), ('sort-size-down', 'arrow-down-big-small'), ('sort-size-down-alt', 'arrow-down-small-big'), ('sort-size-up', 'arrow-up-big-small'), ('sort-size-up-alt', 'arrow-up-small-big'), ('soup', 'bowl-hot'), ('space-shuttle', 'shuttle-space'), ('space-station-moon-alt', 'space-station-moon-construction'), ('square-root-alt', 'square-root-variable'), ('star-half-alt', 'star-half-stroke'), ('starfighter-alt', 'starfighter-twin-ion-engine'), ('step-backward', 'backward-step'), ('step-forward', 'forward-step'), ('sticky-note', 'note-sticky'), ('stop-circle', 'circle-stop'), ('store-alt', 'shop'), ('store-alt-slash', 'shop-slash'), ('stream', 'bars-staggered'), ('subway', 'train-subway'), ('surprise', 'face-surprise'), ('swimmer', 'person-swimming'), ('swimming-pool', 'water-ladder'), ('sync', 'arrows-rotate'), ('sync-alt', 'rotate'), ('table-tennis', 'table-tennis-paddle-ball'), ('tablet-alt', 'tablet-screen-button'), ('tablet-android', 'tablet'), ('tablet-android-alt', 'tablet-screen'), ('tachometer', 'gauge-simple'), ('tachometer-alt', 'gauge'), ('tachometer-alt-average', 'gauge-med'), ('tachometer-alt-fast', 'gauge'), ('tachometer-alt-fastest', 'gauge-max'), ('tachometer-alt-slow', 'gauge-low'), ('tachometer-alt-slowest', 'gauge-min'), ('tachometer-average', 'gauge-simple-med'), ('tachometer-fast', 'gauge-simple'), ('tachometer-fastest', 'gauge-simple-max'), ('tachometer-slow', 'gauge-simple-low'), ('tachometer-slowest', 'gauge-simple-min'), ('tanakh', 'book-tanakh'), ('tasks', 'list-check'), ('tasks-alt', 'bars-progress'), ('telegram-plane', 'telegram'), ('temperature-down', 'temperature-arrow-down'), ('temperature-frigid', 'temperature-snow'), ('temperature-hot', 'temperature-sun'), ('temperature-up', 'temperature-arrow-up'), ('tenge', 'tenge-sign'), ('th', 'table-cells'), ('th-large', 'table-cells-large'), ('th-list', 'table-list'), ('theater-masks', 'masks-theater'), ('thermometer-empty', 'temperature-empty'), ('thermometer-full', 'temperature-full'), ('thermometer-half', 'temperature-half'), ('thermometer-quarter', 'temperature-quarter'), ('thermometer-three-quarters', 'temperature-three-quarters'), ('thumb-tack', 'thumbtack'), ('thunderstorm', 'cloud-bolt'), ('thunderstorm-moon', 'cloud-bolt-moon'), ('thunderstorm-sun', 'cloud-bolt-sun'), ('ticket-alt', 'ticket-simple'), ('times', 'xmark'), ('times-circle', 'circle-xmark'), ('times-hexagon', 'hexagon-xmark'), ('times-octagon', 'octagon-xmark'), ('times-square', 'square-xmark'), ('tint', 'droplet'), ('tint-slash', 'droplet-slash'), ('tired', 'face-tired'), ('toilet-paper-alt', 'toilet-paper-blank'), ('tombstone-alt', 'tombstone-blank'), ('tools', 'screwdriver-wrench'), ('torah', 'scroll-torah'), ('tram', 'train-tram'), ('transgender-alt', 'transgender'), ('trash-alt', 'trash-can'), ('trash-restore', 'trash-arrow-up'), ('trash-restore-alt', 'trash-can-arrow-up'), ('trash-undo-alt', 'trash-can-undo'), ('tree-alt', 'tree-deciduous'), ('triangle-music', 'triangle-instrument'), ('trophy-alt', 'trophy-star'), ('truck-couch', 'truck-ramp-couch'), ('truck-loading', 'truck-ramp-box'), ('tshirt', 'shirt'), ('tv-alt', 'tv'), ('undo', 'arrow-rotate-left'), ('undo-alt', 'rotate-left'), ('university', 'building-columns'), ('unlink', 'link-slash'), ('unlock-alt', 'unlock-keyhole'), ('usd-circle', 'circle-dollar'), ('usd-square', 'square-dollar'), ('user-alt', 'user-large'), ('user-alt-slash', 'user-large-slash'), ('user-chart', 'chart-user'), ('user-circle', 'circle-user'), ('user-cog', 'user-gear'), ('user-edit', 'user-pen'), ('user-friends', 'user-group'), ('user-hard-hat', 'user-helmet-safety'), ('user-md', 'user-doctor'), ('user-md-chat', 'user-doctor-message'), ('user-times', 'user-xmark'), ('users-class', 'screen-users'), ('users-cog', 'users-gear'), ('users-crown', 'user-group-crown'), ('utensil-fork', 'fork'), ('utensil-knife', 'knife'), ('utensil-spoon', 'spoon'), ('utensils-alt', 'fork-knife'), ('vhs', 'cassette-vhs'), ('volleyball-ball', 'volleyball'), ('volume-down', 'volume-low'), ('volume-mute', 'volume-xmark'), ('volume-up', 'volume-high'), ('vote-nay', 'xmark-to-slot'), ('vote-yea', 'check-to-slot'), ('walking', 'person-walking'), ('warehouse-alt', 'warehouse-full'), ('washer', 'washing-machine'), ('water-lower', 'water-arrow-down'), ('water-rise', 'water-arrow-up'), ('waveform-path', 'waveform-lines'), ('webcam', 'camera-web'), ('webcam-slash', 'camera-web-slash'), ('weight', 'weight-scale'), ('wifi-1', 'wifi-weak'), ('wifi-2', 'wifi-fair'), ('window-alt', 'window-flip'), ('window-close', 'rectangle-xmark'), ('wine-glass-alt', 'wine-glass-empty')) AS mapping(from_icon, to_icon)\n)\nUPDATE badges\nSET icon =\n CASE\n WHEN icon LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)\n ELSE remaps.to_icon\n END\nFROM remaps\nWHERE icon = remaps.from_icon\n OR icon = CONCAT('fa-', remaps.from_icon)\n OR icon = CONCAT('far-', remaps.from_icon)\n OR icon = CONCAT('fab-', remaps.from_icon)\n OR icon = CONCAT('far fa-', remaps.from_icon)\n OR icon = CONCAT('fab fa-', remaps.from_icon)\n OR icon = CONCAT('fas fa-', remaps.from_icon);\n")
-> 0.0303s
-- execute("UPDATE badges\nSET icon =\nCASE\n WHEN icon LIKE 'fas fa-%' THEN SUBSTRING(icon FROM 8)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fa-%' THEN SUBSTRING(icon FROM 4)\n ELSE icon\nEND\nWHERE icon LIKE 'fa-%'\n OR icon LIKE 'far fa-%'\n OR icon LIKE 'fab fa-%'\n OR icon LIKE 'fas fa-%';\n")
-> 0.0005s
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon FROM (VALUES ('adjust', 'circle-half-stroke'), ('air-freshener', 'spray-can-sparkles'), ('alien-monster', 'alien-8bit'), ('allergies', 'hand-dots'), ('ambulance', 'truck-medical'), ('american-sign-language-interpreting', 'hands-asl-interpreting'), ('analytics', 'chart-mixed'), ('angle-double-down', 'angles-down'), ('angle-double-left', 'angles-left'), ('angle-double-right', 'angles-right'), ('angle-double-up', 'angles-up'), ('angry', 'face-angry'), ('apple-alt', 'apple-whole'), ('apple-crate', 'crate-apple'), ('archive', 'box-archive'), ('arrow-alt-circle-down', 'circle-down'), ('arrow-alt-circle-left', 'circle-left'), ('arrow-alt-circle-right', 'circle-right'), ('arrow-alt-circle-up', 'circle-up'), ('arrow-alt-down', 'down'), ('arrow-alt-from-bottom', 'up-from-line'), ('arrow-alt-from-left', 'right-from-line'), ('arrow-alt-from-right', 'left-from-line'), ('arrow-alt-from-top', 'down-from-line'), ('arrow-alt-left', 'left'), ('arrow-alt-right', 'right'), ('arrow-alt-square-down', 'square-down'), ('arrow-alt-square-left', 'square-left'), ('arrow-alt-square-right', 'square-right'), ('arrow-alt-square-up', 'square-up'), ('arrow-alt-to-bottom', 'down-to-line'), ('arrow-alt-to-left', 'left-to-line'), ('arrow-alt-to-right', 'right-to-line'), ('arrow-alt-to-top', 'up-to-line'), ('arrow-alt-up', 'up'), ('arrow-circle-down', 'circle-arrow-down'), ('arrow-circle-left', 'circle-arrow-left'), ('arrow-circle-right', 'circle-arrow-right'), ('arrow-circle-up', 'circle-arrow-up'), ('arrow-from-bottom', 'arrow-up-from-line'), ('arrow-from-left', 'arrow-right-from-line'), ('arrow-from-right', 'arrow-left-from-line'), ('arrow-from-top', 'arrow-down-from-line'), ('arrow-square-down', 'square-arrow-down'), ('arrow-square-left', 'square-arrow-left'), ('arrow-square-right', 'square-arrow-right'), ('arrow-square-up', 'square-arrow-up'), ('arrow-to-bottom', 'arrow-down-to-line'), ('arrow-to-left', 'arrow-left-to-line'), ('arrow-to-right', 'arrow-right-to-line'), ('arrow-to-top', 'arrow-up-to-line'), ('arrows', 'arrows-up-down-left-right'), ('arrows-alt', 'up-down-left-right'), ('arrows-alt-h', 'left-right'), ('arrows-alt-v', 'up-down'), ('arrows-h', 'arrows-left-right'), ('arrows-v', 'arrows-up-down'), ('assistive-listening-systems', 'ear-listen'), ('atlas', 'book-atlas'), ('atom-alt', 'atom-simple'), ('backspace', 'delete-left'), ('balance-scale', 'scale-balanced'), ('balance-scale-left', 'scale-unbalanced'), ('balance-scale-right', 'scale-unbalanced-flip'), ('band-aid', 'bandage'), ('barcode-alt', 'rectangle-barcode'), ('baseball-ball', 'baseball'), ('basketball-ball', 'basketball'), ('bed-alt', 'bed-front'), ('beer', 'beer-mug-empty'), ('betamax', 'cassette-betamax'), ('bible', 'book-bible'), ('biking', 'person-biking'), ('biking-mountain', 'person-biking-mountain'), ('birthday-cake', 'cake-candles'), ('blind', 'person-walking-with-cane'), ('book-alt', 'book-blank'), ('book-dead', 'book-skull'), ('book-reader', 'book-open-reader'), ('book-spells', 'book-sparkles'), ('border-style', 'border-top-left'), ('border-style-alt', 'border-bottom-right'), ('box-alt', 'box-taped'), ('box-fragile', 'square-fragile'), ('box-full', 'box-open-full'), ('box-up', 'square-this-way-up'), ('box-usd', 'box-dollar'), ('boxes', 'boxes-stacked'), ('boxes-alt', 'boxes-stacked'), ('brackets', 'brackets-square'), ('broadcast-tower', 'tower-broadcast'), ('burn', 'fire-flame-simple'), ('bus-alt', 'bus-simple'), ('calculator-alt', 'calculator-simple'), ('calendar-alt', 'calendar-days'), ('calendar-edit', 'calendar-pen'), ('calendar-times', 'calendar-xmark'), ('camera-alt', 'camera'), ('camera-home', 'camera-security'), ('car-alt', 'car-rear'), ('car-crash', 'car-burst'), ('car-mechanic', 'car-wrench'), ('caravan-alt', 'caravan-simple'), ('caret-circle-down', 'circle-caret-down'), ('caret-circle-left', 'circle-caret-left'), ('caret-circle-right', 'circle-caret-right'), ('caret-circle-up', 'circle-caret-up'), ('caret-square-down', 'square-caret-down'), ('caret-square-left', 'square-caret-left'), ('caret-square-right', 'square-caret-right'), ('caret-square-up', 'square-caret-up'), ('cctv', 'camera-cctv'), ('chalkboard-teacher', 'chalkboard-user'), ('chart-pie-alt', 'chart-pie-simple'), ('check-circle', 'circle-check'), ('check-square', 'square-check'), ('cheeseburger', 'burger-cheese'), ('chess-bishop-alt', 'chess-bishop-piece'), ('chess-clock-alt', 'chess-clock-flip'), ('chess-king-alt', 'chess-king-piece'), ('chess-knight-alt', 'chess-knight-piece'), ('chess-pawn-alt', 'chess-pawn-piece'), ('chess-queen-alt', 'chess-queen-piece'), ('chess-rook-alt', 'chess-rook-piece'), ('chevron-circle-down', 'circle-chevron-down'), ('chevron-circle-left', 'circle-chevron-left'), ('chevron-circle-right', 'circle-chevron-right'), ('chevron-circle-up', 'circle-chevron-up'), ('chevron-double-down', 'chevrons-down'), ('chevron-double-left', 'chevrons-left'), ('chevron-double-right', 'chevrons-right'), ('chevron-double-up', 'chevrons-up'), ('chevron-square-down', 'square-chevron-down'), ('chevron-square-left', 'square-chevron-left'), ('chevron-square-right', 'square-chevron-right'), ('chevron-square-up', 'square-chevron-up'), ('clinic-medical', 'house-chimney-medical'), ('cloud-download', 'cloud-arrow-down'), ('cloud-download-alt', 'cloud-arrow-down'), ('cloud-upload', 'cloud-arrow-up'), ('cloud-upload-alt', 'cloud-arrow-up'), ('cocktail', 'martini-glass-citrus'), ('coffee', 'mug-saucer'), ('coffee-togo', 'cup-togo'), ('cog', 'gear'), ('cogs', 'gears'), ('columns', 'table-columns'), ('comment-alt', 'message'), ('comment-alt-check', 'message-check'), ('comment-alt-dollar', 'message-dollar'), ('comment-alt-dots', 'message-dots'), ('comment-alt-edit', 'message-pen'), ('comment-alt-exclamation', 'message-exclamation'), ('comment-alt-lines', 'message-lines'), ('comment-alt-medical', 'message-medical'), ('comment-alt-minus', 'message-minus'), ('comment-alt-music', 'message-music'), ('comment-alt-plus', 'message-plus'), ('comment-alt-slash', 'message-slash'), ('comment-alt-smile', 'message-smile'), ('comment-alt-times', 'message-xmark'), ('comment-edit', 'comment-pen'), ('comment-times', 'comment-xmark'), ('comments-alt', 'messages'), ('comments-alt-dollar', 'messages-dollar'), ('compress-alt', 'down-left-and-up-right-to-center'), ('compress-arrows-alt', 'minimize'), ('concierge-bell', 'bell-concierge'), ('construction', 'triangle-person-digging'), ('conveyor-belt-alt', 'conveyor-belt-boxes'), ('cowbell-more', 'cowbell-circle-plus'), ('cricket', 'cricket-bat-ball'), ('crop-alt', 'crop-simple'), ('curling', 'curling-stone'), ('cut', 'scissors'), ('deaf', 'ear-deaf'), ('debug', 'ban-bug'), ('desktop-alt', 'desktop'), ('dewpoint', 'droplet-degree'), ('diagnoses', 'person-dots-from-line'), ('digging', 'person-digging'), ('digital-tachograph', 'tachograph-digital'), ('directions', 'diamond-turn-right'), ('dizzy', 'face-dizzy'), ('dolly-flatbed', 'cart-flatbed'), ('dolly-flatbed-alt', 'cart-flatbed-boxes'), ('dolly-flatbed-empty', 'cart-flatbed-empty'), ('donate', 'circle-dollar-to-slot'), ('dot-circle', 'circle-dot'), ('drafting-compass', 'compass-drafting'), ('drone-alt', 'drone-front'), ('dryer-alt', 'dryer-heat'), ('eclipse-alt', 'moon-over-sun'), ('edit', 'pen-to-square'), ('ellipsis-h', 'ellipsis'), ('ellipsis-h-alt', 'ellipsis-stroke'), ('ellipsis-v', 'ellipsis-vertical'), ('ellipsis-v-alt', 'ellipsis-stroke-vertical'), ('envelope-square', 'square-envelope'), ('exchange', 'arrow-right-arrow-left'), ('exchange-alt', 'right-left'), ('exclamation-circle', 'circle-exclamation'), ('exclamation-square', 'square-exclamation'), ('exclamation-triangle', 'triangle-exclamation'), ('expand-alt', 'up-right-and-down-left-from-center'), ('expand-arrows', 'arrows-maximize'), ('expand-arrows-alt', 'maximize'), ('external-link', 'arrow-up-right-from-square'), ('external-link-alt', 'up-right-from-square'), ('external-link-square', 'square-arrow-up-right'), ('external-link-square-alt', 'square-up-right'), ('eyedropper', 'eye-dropper'), ('fast-backward', 'backward-fast'), ('fast-forward', 'forward-fast'), ('feather-alt', 'feather-pointed'), ('female', 'person-dress'), ('field-hockey', 'field-hockey-stick-ball'), ('fighter-jet', 'jet-fighter'), ('file-alt', 'file-lines'), ('file-archive', 'file-zipper'), ('file-chart-line', 'file-chart-column'), ('file-download', 'file-arrow-down'), ('file-edit', 'file-pen'), ('file-medical-alt', 'file-waveform'), ('file-search', 'file-magnifying-glass'), ('file-times', 'file-xmark'), ('file-upload', 'file-arrow-up'), ('film-alt', 'film-simple'), ('fire-alt', 'fire-flame-curved'), ('first-aid', 'kit-medical'), ('fist-raised', 'hand-fist'), ('flag-alt', 'flag-swallowtail'), ('flame', 'fire-flame'), ('flask-poison', 'flask-round-poison'), ('flask-potion', 'flask-round-potion'), ('flushed', 'face-flushed'), ('fog', 'cloud-fog'), ('folder-download', 'folder-arrow-down'), ('folder-times', 'folder-xmark'), ('folder-upload', 'folder-arrow-up'), ('font-awesome-alt', 'square-font-awesome-stroke'), ('font-awesome-flag', 'font-awesome'), ('font-awesome-logo-full', 'font-awesome'), ('football-ball', 'football'), ('fragile', 'wine-glass-crack'), ('frosty-head', 'snowman-head'), ('frown', 'face-frown'), ('frown-open', 'face-frown-open'), ('funnel-dollar', 'filter-circle-dollar'), ('game-board-alt', 'game-board-simple'), ('gamepad-alt', 'gamepad-modern'), ('glass-champagne', 'champagne-glass'), ('glass-cheers', 'champagne-glasses'), ('glass-martini', 'martini-glass-empty'), ('glass-martini-alt', 'martini-glass'), ('glass-whiskey', 'whiskey-glass'), ('glass-whiskey-rocks', 'whiskey-glass-ice'), ('glasses-alt', 'glasses-round'), ('globe-africa', 'earth-africa'), ('globe-americas', 'earth-americas'), ('globe-asia', 'earth-asia'), ('globe-europe', 'earth-europe'), ('golf-ball', 'golf-ball-tee'), ('grimace', 'face-grimace'), ('grin', 'face-grin'), ('grin-alt', 'face-grin-wide'), ('grin-beam', 'face-grin-beam'), ('grin-beam-sweat', 'face-grin-beam-sweat'), ('grin-hearts', 'face-grin-hearts'), ('grin-squint', 'face-grin-squint'), ('grin-squint-tears', 'face-grin-squint-tears'), ('grin-stars', 'face-grin-stars'), ('grin-tears', 'face-grin-tears'), ('grin-tongue', 'face-grin-tongue'), ('grin-tongue-squint', 'face-grin-tongue-squint'), ('grin-tongue-wink', 'face-grin-tongue-wink'), ('grin-wink', 'face-grin-wink'), ('grip-horizontal', 'grip'), ('h-square', 'square-h'), ('hamburger', 'burger'), ('hand-holding-usd', 'hand-holding-dollar'), ('hand-holding-water', 'hand-holding-droplet'), ('hand-paper', 'hand'), ('hand-receiving', 'hands-holding-diamond'), ('hand-rock', 'hand-back-fist'), ('hands-heart', 'hands-holding-heart'), ('hands-helping', 'handshake-angle'), ('hands-usd', 'hands-holding-dollar'), ('hands-wash', 'hands-bubbles'), ('handshake-alt', 'handshake-simple'), ('handshake-alt-slash', 'handshake-simple-slash'), ('hard-hat', 'helmet-safety'), ('hdd', 'hard-drive'), ('head-vr', 'head-side-goggles'), ('headphones-alt', 'headphones-simple'), ('heart-broken', 'heart-crack'), ('heart-circle', 'circle-heart'), ('heart-rate', 'wave-pulse'), ('heart-square', 'square-heart'), ('heartbeat', 'heart-pulse'), ('hiking', 'person-hiking'), ('history', 'clock-rotate-left'), ('home', 'house'), ('home-alt', 'house'), ('home-heart', 'house-heart'), ('home-lg', 'house-chimney'), ('home-lg-alt', 'house'), ('hospital-alt', 'hospital'), ('hospital-symbol', 'circle-h'), ('hot-tub', 'hot-tub-person'), ('hourglass-half', 'hourglass'), ('house-damage', 'house-chimney-crack'), ('house-leave', 'house-person-leave'), ('house-return', 'house-person-return'), ('hryvnia', 'hryvnia-sign'), ('humidity', 'droplet-percent'), ('icons-alt', 'symbols'), ('id-card-alt', 'id-card-clip'), ('industry-alt', 'industry-windows'), ('info-circle', 'circle-info'), ('info-square', 'square-info'), ('innosoft', '42-group'), ('inventory', 'shelves'), ('journal-whills', 'book-journal-whills'), ('kiss', 'face-kiss'), ('kiss-beam', 'face-kiss-beam'), ('kiss-wink-heart', 'face-kiss-wink-heart'), ('landmark-alt', 'landmark-dome'), ('laptop-house', 'house-laptop'), ('laugh', 'face-laugh'), ('laugh-beam', 'face-laugh-beam'), ('laugh-squint', 'face-laugh-squint'), ('laugh-wink', 'face-laugh-wink'), ('level-down', 'arrow-turn-down'), ('level-down-alt', 'turn-down'), ('level-up', 'arrow-turn-up'), ('level-up-alt', 'turn-up'), ('list-alt', 'rectangle-list'), ('location', 'location-crosshairs'), ('location-circle', 'circle-location-arrow'), ('location-slash', 'location-crosshairs-slash'), ('lock-alt', 'lock-keyhole'), ('lock-open-alt', 'lock-keyhole-open'), ('long-arrow-alt-down', 'down-long'), ('long-arrow-alt-left', 'left-long'), ('long-arrow-alt-right', 'right-long'), ('long-arrow-alt-up', 'up-long'), ('long-arrow-down', 'arrow-down-long'), ('long-arrow-left', 'arrow-left-long'), ('long-arrow-right', 'arrow-right-long'), ('long-arrow-up', 'arrow-up-long'), ('low-vision', 'eye-low-vision'), ('luchador', 'luchador-mask'), ('luggage-cart', 'cart-flatbed-suitcase'), ('magic', 'wand-magic'), ('mail-bulk', 'envelopes-bulk'), ('male', 'person'), ('map-marked', 'map-location'), ('map-marked-alt', 'map-location-dot'), ('map-marker', 'location-pin'), ('map-marker-alt', 'location-dot'), ('map-marker-alt-slash', 'location-dot-slash'), ('map-marker-check', 'location-check'), ('map-marker-edit', 'location-pen'), ('map-marker-exclamation', 'location-exclamation'), ('map-marker-minus', 'location-minus'), ('map-marker-plus', 'location-plus'), ('map-marker-question', 'location-question'), ('map-marker-slash', 'location-pin-slash'), ('map-marker-smile', 'location-smile'), ('map-marker-times', 'location-xmark'), ('map-signs', 'signs-post'), ('mars-stroke-h', 'mars-stroke-right'), ('mars-stroke-v', 'mars-stroke-up'), ('medium-m', 'medium'), ('medkit', 'suitcase-medical'), ('meh', 'face-meh'), ('meh-blank', 'face-meh-blank'), ('meh-rolling-eyes', 'face-rolling-eyes'), ('microphone-alt', 'microphone-lines'), ('microphone-alt-slash', 'microphone-lines-slash'), ('mind-share', 'brain-arrow-curved-right'), ('minus-circle', 'circle-minus'), ('minus-hexagon', 'hexagon-minus'), ('minus-octagon', 'octagon-minus'), ('minus-square', 'square-minus'), ('mobile-alt', 'mobile-screen-button'), ('mobile-android', 'mobile'), ('mobile-android-alt', 'mobile-screen'), ('money-bill-alt', 'money-bill-1'), ('money-bill-wave-alt', 'money-bill-1-wave'), ('money-check-alt', 'money-check-dollar'), ('money-check-edit', 'money-check-pen'), ('money-check-edit-alt', 'money-check-dollar-pen'), ('monitor-heart-rate', 'monitor-waveform'), ('mouse', 'computer-mouse'), ('mouse-alt', 'computer-mouse-scrollwheel'), ('mouse-pointer', 'arrow-pointer'), ('music-alt', 'music-note'), ('music-alt-slash', 'music-note-slash'), ('oil-temp', 'oil-temperature'), ('page-break', 'file-dashed-line'), ('paint-brush', 'paintbrush'), ('paint-brush-alt', 'paintbrush-fine'), ('paint-brush-fine', 'paintbrush-fine'), ('pallet-alt', 'pallet-boxes'), ('paragraph-rtl', 'paragraph-left'), ('parking', 'square-parking'), ('parking-circle', 'circle-parking'), ('parking-circle-slash', 'ban-parking'), ('parking-slash', 'square-parking-slash'), ('pastafarianism', 'spaghetti-monster-flying'), ('pause-circle', 'circle-pause'), ('paw-alt', 'paw-simple'), ('pen-alt', 'pen-clip'), ('pen-square', 'square-pen'), ('pencil-alt', 'pencil'), ('pencil-paintbrush', 'pen-paintbrush'), ('pencil-ruler', 'pen-ruler'), ('pennant', 'flag-pennant'), ('people-arrows', 'people-arrows-left-right'), ('people-carry', 'people-carry-box'), ('percentage', 'percent'), ('person-carry', 'person-carry-box'), ('phone-alt', 'phone-flip'), ('phone-laptop', 'laptop-mobile'), ('phone-square', 'square-phone'), ('phone-square-alt', 'square-phone-flip'), ('photo-video', 'photo-film'), ('plane-alt', 'plane-engines'), ('play-circle', 'circle-play'), ('plus-circle', 'circle-plus'), ('plus-hexagon', 'hexagon-plus'), ('plus-octagon', 'octagon-plus'), ('plus-square', 'square-plus'), ('poll', 'square-poll-vertical'), ('poll-h', 'square-poll-horizontal'), ('portal-enter', 'person-to-portal'), ('portal-exit', 'person-from-portal'), ('portrait', 'image-portrait'), ('pound-sign', 'sterling-sign'), ('pray', 'person-praying'), ('praying-hands', 'hands-praying'), ('prescription-bottle-alt', 'prescription-bottle-medical'), ('presentation', 'presentation-screen'), ('print-search', 'print-magnifying-glass'), ('procedures', 'bed-pulse'), ('project-diagram', 'diagram-project'), ('question-circle', 'circle-question'), ('question-square', 'square-question'), ('quran', 'book-quran'), ('rabbit-fast', 'rabbit-running'), ('radiation-alt', 'circle-radiation'), ('radio-alt', 'radio-tuner'), ('random', 'shuffle'), ('rectangle-landscape', 'rectangle'), ('rectangle-portrait', 'rectangle-vertical'), ('redo', 'arrow-rotate-right'), ('redo-alt', 'rotate-right'), ('remove-format', 'text-slash'), ('repeat-1-alt', 'arrows-repeat-1'), ('repeat-alt', 'arrows-repeat'), ('retweet-alt', 'arrows-retweet'), ('rss-square', 'square-rss'), ('running', 'person-running'), ('sad-cry', 'face-sad-cry'), ('sad-tear', 'face-sad-tear'), ('save', 'floppy-disk'), ('sax-hot', 'saxophone-fire'), ('scalpel-path', 'scalpel-line-dashed'), ('scanner-image', 'scanner'), ('search', 'magnifying-glass'), ('search-dollar', 'magnifying-glass-dollar'), ('search-location', 'magnifying-glass-location'), ('search-minus', 'magnifying-glass-minus'), ('search-plus', 'magnifying-glass-plus'), ('sensor-alert', 'sensor-triangle-exclamation'), ('sensor-smoke', 'sensor-cloud'), ('share-alt', 'share-nodes'), ('share-alt-square', 'square-share-nodes'), ('share-square', 'share-from-square'), ('shield-alt', 'shield-halved'), ('shipping-fast', 'truck-fast'), ('shipping-timed', 'truck-clock'), ('shopping-bag', 'bag-shopping'), ('shopping-basket', 'basket-shopping'), ('shopping-cart', 'cart-shopping'), ('shuttle-van', 'van-shuttle'), ('sign', 'sign-hanging'), ('sign-in', 'arrow-right-to-bracket'), ('sign-in-alt', 'right-to-bracket'), ('sign-language', 'hands'), ('sign-out', 'arrow-right-from-bracket'), ('sign-out-alt', 'right-from-bracket'), ('signal-1', 'signal-weak'), ('signal-2', 'signal-fair'), ('signal-3', 'signal-good'), ('signal-4', 'signal-strong'), ('signal-alt', 'signal-bars'), ('signal-alt-1', 'signal-bars-weak'), ('signal-alt-2', 'signal-bars-fair'), ('signal-alt-3', 'signal-bars-good'), ('signal-alt-slash', 'signal-bars-slash'), ('skating', 'person-skating'), ('ski-jump', 'person-ski-jumping'), ('ski-lift', 'person-ski-lift'), ('skiing', 'person-skiing'), ('skiing-nordic', 'person-skiing-nordic'), ('slack-hash', 'slack'), ('sledding', 'person-sledding'), ('sliders-h', 'sliders'), ('sliders-h-square', 'square-sliders'), ('sliders-v', 'sliders-up'), ('sliders-v-square', 'square-sliders-vertical'), ('smile', 'face-smile'), ('smile-beam', 'face-smile-beam'), ('smile-plus', 'face-smile-plus'), ('smile-wink', 'face-smile-wink'), ('smoking-ban', 'ban-smoking'), ('sms', 'comment-sms'), ('snapchat-ghost', 'snapchat'), ('snowboarding', 'person-snowboarding'), ('snowmobile', 'person-snowmobiling'), ('sort-alpha-down', 'arrow-down-a-z'), ('sort-alpha-down-alt', 'arrow-down-z-a'), ('sort-alpha-up', 'arrow-up-a-z'), ('sort-alpha-up-alt', 'arrow-up-z-a'), ('sort-alt', 'arrow-down-arrow-up'), ('sort-amount-down', 'arrow-down-wide-short'), ('sort-amount-down-alt', 'arrow-down-short-wide'), ('sort-amount-up', 'arrow-up-wide-short'), ('sort-amount-up-alt', 'arrow-up-short-wide'), ('sort-circle', 'circle-sort'), ('sort-circle-down', 'circle-sort-down'), ('sort-circle-up', 'circle-sort-up'), ('sort-numeric-down', 'arrow-down-1-9'), ('sort-numeric-down-alt', 'arrow-down-9-1'), ('sort-numeric-up', 'arrow-up-1-9'), ('sort-numeric-up-alt', 'arrow-up-9-1'), ('sort-shapes-down', 'arrow-down-triangle-square'), ('sort-shapes-down-alt', 'arrow-down-square-triangle'), ('sort-shapes-up', 'arrow-up-triangle-square'), ('sort-shapes-up-alt', 'arrow-up-square-triangle'), ('sort-size-down', 'arrow-down-big-small'), ('sort-size-down-alt', 'arrow-down-small-big'), ('sort-size-up', 'arrow-up-big-small'), ('sort-size-up-alt', 'arrow-up-small-big'), ('soup', 'bowl-hot'), ('space-shuttle', 'shuttle-space'), ('space-station-moon-alt', 'space-station-moon-construction'), ('square-root-alt', 'square-root-variable'), ('star-half-alt', 'star-half-stroke'), ('starfighter-alt', 'starfighter-twin-ion-engine'), ('step-backward', 'backward-step'), ('step-forward', 'forward-step'), ('sticky-note', 'note-sticky'), ('stop-circle', 'circle-stop'), ('store-alt', 'shop'), ('store-alt-slash', 'shop-slash'), ('stream', 'bars-staggered'), ('subway', 'train-subway'), ('surprise', 'face-surprise'), ('swimmer', 'person-swimming'), ('swimming-pool', 'water-ladder'), ('sync', 'arrows-rotate'), ('sync-alt', 'rotate'), ('table-tennis', 'table-tennis-paddle-ball'), ('tablet-alt', 'tablet-screen-button'), ('tablet-android', 'tablet'), ('tablet-android-alt', 'tablet-screen'), ('tachometer', 'gauge-simple'), ('tachometer-alt', 'gauge'), ('tachometer-alt-average', 'gauge-med'), ('tachometer-alt-fast', 'gauge'), ('tachometer-alt-fastest', 'gauge-max'), ('tachometer-alt-slow', 'gauge-low'), ('tachometer-alt-slowest', 'gauge-min'), ('tachometer-average', 'gauge-simple-med'), ('tachometer-fast', 'gauge-simple'), ('tachometer-fastest', 'gauge-simple-max'), ('tachometer-slow', 'gauge-simple-low'), ('tachometer-slowest', 'gauge-simple-min'), ('tanakh', 'book-tanakh'), ('tasks', 'list-check'), ('tasks-alt', 'bars-progress'), ('telegram-plane', 'telegram'), ('temperature-down', 'temperature-arrow-down'), ('temperature-frigid', 'temperature-snow'), ('temperature-hot', 'temperature-sun'), ('temperature-up', 'temperature-arrow-up'), ('tenge', 'tenge-sign'), ('th', 'table-cells'), ('th-large', 'table-cells-large'), ('th-list', 'table-list'), ('theater-masks', 'masks-theater'), ('thermometer-empty', 'temperature-empty'), ('thermometer-full', 'temperature-full'), ('thermometer-half', 'temperature-half'), ('thermometer-quarter', 'temperature-quarter'), ('thermometer-three-quarters', 'temperature-three-quarters'), ('thumb-tack', 'thumbtack'), ('thunderstorm', 'cloud-bolt'), ('thunderstorm-moon', 'cloud-bolt-moon'), ('thunderstorm-sun', 'cloud-bolt-sun'), ('ticket-alt', 'ticket-simple'), ('times', 'xmark'), ('times-circle', 'circle-xmark'), ('times-hexagon', 'hexagon-xmark'), ('times-octagon', 'octagon-xmark'), ('times-square', 'square-xmark'), ('tint', 'droplet'), ('tint-slash', 'droplet-slash'), ('tired', 'face-tired'), ('toilet-paper-alt', 'toilet-paper-blank'), ('tombstone-alt', 'tombstone-blank'), ('tools', 'screwdriver-wrench'), ('torah', 'scroll-torah'), ('tram', 'train-tram'), ('transgender-alt', 'transgender'), ('trash-alt', 'trash-can'), ('trash-restore', 'trash-arrow-up'), ('trash-restore-alt', 'trash-can-arrow-up'), ('trash-undo-alt', 'trash-can-undo'), ('tree-alt', 'tree-deciduous'), ('triangle-music', 'triangle-instrument'), ('trophy-alt', 'trophy-star'), ('truck-couch', 'truck-ramp-couch'), ('truck-loading', 'truck-ramp-box'), ('tshirt', 'shirt'), ('tv-alt', 'tv'), ('undo', 'arrow-rotate-left'), ('undo-alt', 'rotate-left'), ('university', 'building-columns'), ('unlink', 'link-slash'), ('unlock-alt', 'unlock-keyhole'), ('usd-circle', 'circle-dollar'), ('usd-square', 'square-dollar'), ('user-alt', 'user-large'), ('user-alt-slash', 'user-large-slash'), ('user-chart', 'chart-user'), ('user-circle', 'circle-user'), ('user-cog', 'user-gear'), ('user-edit', 'user-pen'), ('user-friends', 'user-group'), ('user-hard-hat', 'user-helmet-safety'), ('user-md', 'user-doctor'), ('user-md-chat', 'user-doctor-message'), ('user-times', 'user-xmark'), ('users-class', 'screen-users'), ('users-cog', 'users-gear'), ('users-crown', 'user-group-crown'), ('utensil-fork', 'fork'), ('utensil-knife', 'knife'), ('utensil-spoon', 'spoon'), ('utensils-alt', 'fork-knife'), ('vhs', 'cassette-vhs'), ('volleyball-ball', 'volleyball'), ('volume-down', 'volume-low'), ('volume-mute', 'volume-xmark'), ('volume-up', 'volume-high'), ('vote-nay', 'xmark-to-slot'), ('vote-yea', 'check-to-slot'), ('walking', 'person-walking'), ('warehouse-alt', 'warehouse-full'), ('washer', 'washing-machine'), ('water-lower', 'water-arrow-down'), ('water-rise', 'water-arrow-up'), ('waveform-path', 'waveform-lines'), ('webcam', 'camera-web'), ('webcam-slash', 'camera-web-slash'), ('weight', 'weight-scale'), ('wifi-1', 'wifi-weak'), ('wifi-2', 'wifi-fair'), ('window-alt', 'window-flip'), ('window-close', 'rectangle-xmark'), ('wine-glass-alt', 'wine-glass-empty')) AS mapping(from_icon, to_icon)\n)\nUPDATE sidebar_urls\nSET icon =\n CASE\n WHEN icon LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)\n ELSE remaps.to_icon\n END\nFROM remaps\nWHERE icon = remaps.from_icon\n OR icon = CONCAT('fa-', remaps.from_icon)\n OR icon = CONCAT('far-', remaps.from_icon)\n OR icon = CONCAT('fab-', remaps.from_icon)\n OR icon = CONCAT('far fa-', remaps.from_icon)\n OR icon = CONCAT('fab fa-', remaps.from_icon)\n OR icon = CONCAT('fas fa-', remaps.from_icon);\n")
-> 0.0075s
-- execute("UPDATE sidebar_urls\nSET icon =\nCASE\n WHEN icon LIKE 'fas fa-%' THEN SUBSTRING(icon FROM 8)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fa-%' THEN SUBSTRING(icon FROM 4)\n ELSE icon\nEND\nWHERE icon LIKE 'fa-%'\n OR icon LIKE 'far fa-%'\n OR icon LIKE 'fab fa-%'\n OR icon LIKE 'fas fa-%';\n")
-> 0.0003s
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon FROM (VALUES ('adjust', 'circle-half-stroke'), ('air-freshener', 'spray-can-sparkles'), ('alien-monster', 'alien-8bit'), ('allergies', 'hand-dots'), ('ambulance', 'truck-medical'), ('american-sign-language-interpreting', 'hands-asl-interpreting'), ('analytics', 'chart-mixed'), ('angle-double-down', 'angles-down'), ('angle-double-left', 'angles-left'), ('angle-double-right', 'angles-right'), ('angle-double-up', 'angles-up'), ('angry', 'face-angry'), ('apple-alt', 'apple-whole'), ('apple-crate', 'crate-apple'), ('archive', 'box-archive'), ('arrow-alt-circle-down', 'circle-down'), ('arrow-alt-circle-left', 'circle-left'), ('arrow-alt-circle-right', 'circle-right'), ('arrow-alt-circle-up', 'circle-up'), ('arrow-alt-down', 'down'), ('arrow-alt-from-bottom', 'up-from-line'), ('arrow-alt-from-left', 'right-from-line'), ('arrow-alt-from-right', 'left-from-line'), ('arrow-alt-from-top', 'down-from-line'), ('arrow-alt-left', 'left'), ('arrow-alt-right', 'right'), ('arrow-alt-square-down', 'square-down'), ('arrow-alt-square-left', 'square-left'), ('arrow-alt-square-right', 'square-right'), ('arrow-alt-square-up', 'square-up'), ('arrow-alt-to-bottom', 'down-to-line'), ('arrow-alt-to-left', 'left-to-line'), ('arrow-alt-to-right', 'right-to-line'), ('arrow-alt-to-top', 'up-to-line'), ('arrow-alt-up', 'up'), ('arrow-circle-down', 'circle-arrow-down'), ('arrow-circle-left', 'circle-arrow-left'), ('arrow-circle-right', 'circle-arrow-right'), ('arrow-circle-up', 'circle-arrow-up'), ('arrow-from-bottom', 'arrow-up-from-line'), ('arrow-from-left', 'arrow-right-from-line'), ('arrow-from-right', 'arrow-left-from-line'), ('arrow-from-top', 'arrow-down-from-line'), ('arrow-square-down', 'square-arrow-down'), ('arrow-square-left', 'square-arrow-left'), ('arrow-square-right', 'square-arrow-right'), ('arrow-square-up', 'square-arrow-up'), ('arrow-to-bottom', 'arrow-down-to-line'), ('arrow-to-left', 'arrow-left-to-line'), ('arrow-to-right', 'arrow-right-to-line'), ('arrow-to-top', 'arrow-up-to-line'), ('arrows', 'arrows-up-down-left-right'), ('arrows-alt', 'up-down-left-right'), ('arrows-alt-h', 'left-right'), ('arrows-alt-v', 'up-down'), ('arrows-h', 'arrows-left-right'), ('arrows-v', 'arrows-up-down'), ('assistive-listening-systems', 'ear-listen'), ('atlas', 'book-atlas'), ('atom-alt', 'atom-simple'), ('backspace', 'delete-left'), ('balance-scale', 'scale-balanced'), ('balance-scale-left', 'scale-unbalanced'), ('balance-scale-right', 'scale-unbalanced-flip'), ('band-aid', 'bandage'), ('barcode-alt', 'rectangle-barcode'), ('baseball-ball', 'baseball'), ('basketball-ball', 'basketball'), ('bed-alt', 'bed-front'), ('beer', 'beer-mug-empty'), ('betamax', 'cassette-betamax'), ('bible', 'book-bible'), ('biking', 'person-biking'), ('biking-mountain', 'person-biking-mountain'), ('birthday-cake', 'cake-candles'), ('blind', 'person-walking-with-cane'), ('book-alt', 'book-blank'), ('book-dead', 'book-skull'), ('book-reader', 'book-open-reader'), ('book-spells', 'book-sparkles'), ('border-style', 'border-top-left'), ('border-style-alt', 'border-bottom-right'), ('box-alt', 'box-taped'), ('box-fragile', 'square-fragile'), ('box-full', 'box-open-full'), ('box-up', 'square-this-way-up'), ('box-usd', 'box-dollar'), ('boxes', 'boxes-stacked'), ('boxes-alt', 'boxes-stacked'), ('brackets', 'brackets-square'), ('broadcast-tower', 'tower-broadcast'), ('burn', 'fire-flame-simple'), ('bus-alt', 'bus-simple'), ('calculator-alt', 'calculator-simple'), ('calendar-alt', 'calendar-days'), ('calendar-edit', 'calendar-pen'), ('calendar-times', 'calendar-xmark'), ('camera-alt', 'camera'), ('camera-home', 'camera-security'), ('car-alt', 'car-rear'), ('car-crash', 'car-burst'), ('car-mechanic', 'car-wrench'), ('caravan-alt', 'caravan-simple'), ('caret-circle-down', 'circle-caret-down'), ('caret-circle-left', 'circle-caret-left'), ('caret-circle-right', 'circle-caret-right'), ('caret-circle-up', 'circle-caret-up'), ('caret-square-down', 'square-caret-down'), ('caret-square-left', 'square-caret-left'), ('caret-square-right', 'square-caret-right'), ('caret-square-up', 'square-caret-up'), ('cctv', 'camera-cctv'), ('chalkboard-teacher', 'chalkboard-user'), ('chart-pie-alt', 'chart-pie-simple'), ('check-circle', 'circle-check'), ('check-square', 'square-check'), ('cheeseburger', 'burger-cheese'), ('chess-bishop-alt', 'chess-bishop-piece'), ('chess-clock-alt', 'chess-clock-flip'), ('chess-king-alt', 'chess-king-piece'), ('chess-knight-alt', 'chess-knight-piece'), ('chess-pawn-alt', 'chess-pawn-piece'), ('chess-queen-alt', 'chess-queen-piece'), ('chess-rook-alt', 'chess-rook-piece'), ('chevron-circle-down', 'circle-chevron-down'), ('chevron-circle-left', 'circle-chevron-left'), ('chevron-circle-right', 'circle-chevron-right'), ('chevron-circle-up', 'circle-chevron-up'), ('chevron-double-down', 'chevrons-down'), ('chevron-double-left', 'chevrons-left'), ('chevron-double-right', 'chevrons-right'), ('chevron-double-up', 'chevrons-up'), ('chevron-square-down', 'square-chevron-down'), ('chevron-square-left', 'square-chevron-left'), ('chevron-square-right', 'square-chevron-right'), ('chevron-square-up', 'square-chevron-up'), ('clinic-medical', 'house-chimney-medical'), ('cloud-download', 'cloud-arrow-down'), ('cloud-download-alt', 'cloud-arrow-down'), ('cloud-upload', 'cloud-arrow-up'), ('cloud-upload-alt', 'cloud-arrow-up'), ('cocktail', 'martini-glass-citrus'), ('coffee', 'mug-saucer'), ('coffee-togo', 'cup-togo'), ('cog', 'gear'), ('cogs', 'gears'), ('columns', 'table-columns'), ('comment-alt', 'message'), ('comment-alt-check', 'message-check'), ('comment-alt-dollar', 'message-dollar'), ('comment-alt-dots', 'message-dots'), ('comment-alt-edit', 'message-pen'), ('comment-alt-exclamation', 'message-exclamation'), ('comment-alt-lines', 'message-lines'), ('comment-alt-medical', 'message-medical'), ('comment-alt-minus', 'message-minus'), ('comment-alt-music', 'message-music'), ('comment-alt-plus', 'message-plus'), ('comment-alt-slash', 'message-slash'), ('comment-alt-smile', 'message-smile'), ('comment-alt-times', 'message-xmark'), ('comment-edit', 'comment-pen'), ('comment-times', 'comment-xmark'), ('comments-alt', 'messages'), ('comments-alt-dollar', 'messages-dollar'), ('compress-alt', 'down-left-and-up-right-to-center'), ('compress-arrows-alt', 'minimize'), ('concierge-bell', 'bell-concierge'), ('construction', 'triangle-person-digging'), ('conveyor-belt-alt', 'conveyor-belt-boxes'), ('cowbell-more', 'cowbell-circle-plus'), ('cricket', 'cricket-bat-ball'), ('crop-alt', 'crop-simple'), ('curling', 'curling-stone'), ('cut', 'scissors'), ('deaf', 'ear-deaf'), ('debug', 'ban-bug'), ('desktop-alt', 'desktop'), ('dewpoint', 'droplet-degree'), ('diagnoses', 'person-dots-from-line'), ('digging', 'person-digging'), ('digital-tachograph', 'tachograph-digital'), ('directions', 'diamond-turn-right'), ('dizzy', 'face-dizzy'), ('dolly-flatbed', 'cart-flatbed'), ('dolly-flatbed-alt', 'cart-flatbed-boxes'), ('dolly-flatbed-empty', 'cart-flatbed-empty'), ('donate', 'circle-dollar-to-slot'), ('dot-circle', 'circle-dot'), ('drafting-compass', 'compass-drafting'), ('drone-alt', 'drone-front'), ('dryer-alt', 'dryer-heat'), ('eclipse-alt', 'moon-over-sun'), ('edit', 'pen-to-square'), ('ellipsis-h', 'ellipsis'), ('ellipsis-h-alt', 'ellipsis-stroke'), ('ellipsis-v', 'ellipsis-vertical'), ('ellipsis-v-alt', 'ellipsis-stroke-vertical'), ('envelope-square', 'square-envelope'), ('exchange', 'arrow-right-arrow-left'), ('exchange-alt', 'right-left'), ('exclamation-circle', 'circle-exclamation'), ('exclamation-square', 'square-exclamation'), ('exclamation-triangle', 'triangle-exclamation'), ('expand-alt', 'up-right-and-down-left-from-center'), ('expand-arrows', 'arrows-maximize'), ('expand-arrows-alt', 'maximize'), ('external-link', 'arrow-up-right-from-square'), ('external-link-alt', 'up-right-from-square'), ('external-link-square', 'square-arrow-up-right'), ('external-link-square-alt', 'square-up-right'), ('eyedropper', 'eye-dropper'), ('fast-backward', 'backward-fast'), ('fast-forward', 'forward-fast'), ('feather-alt', 'feather-pointed'), ('female', 'person-dress'), ('field-hockey', 'field-hockey-stick-ball'), ('fighter-jet', 'jet-fighter'), ('file-alt', 'file-lines'), ('file-archive', 'file-zipper'), ('file-chart-line', 'file-chart-column'), ('file-download', 'file-arrow-down'), ('file-edit', 'file-pen'), ('file-medical-alt', 'file-waveform'), ('file-search', 'file-magnifying-glass'), ('file-times', 'file-xmark'), ('file-upload', 'file-arrow-up'), ('film-alt', 'film-simple'), ('fire-alt', 'fire-flame-curved'), ('first-aid', 'kit-medical'), ('fist-raised', 'hand-fist'), ('flag-alt', 'flag-swallowtail'), ('flame', 'fire-flame'), ('flask-poison', 'flask-round-poison'), ('flask-potion', 'flask-round-potion'), ('flushed', 'face-flushed'), ('fog', 'cloud-fog'), ('folder-download', 'folder-arrow-down'), ('folder-times', 'folder-xmark'), ('folder-upload', 'folder-arrow-up'), ('font-awesome-alt', 'square-font-awesome-stroke'), ('font-awesome-flag', 'font-awesome'), ('font-awesome-logo-full', 'font-awesome'), ('football-ball', 'football'), ('fragile', 'wine-glass-crack'), ('frosty-head', 'snowman-head'), ('frown', 'face-frown'), ('frown-open', 'face-frown-open'), ('funnel-dollar', 'filter-circle-dollar'), ('game-board-alt', 'game-board-simple'), ('gamepad-alt', 'gamepad-modern'), ('glass-champagne', 'champagne-glass'), ('glass-cheers', 'champagne-glasses'), ('glass-martini', 'martini-glass-empty'), ('glass-martini-alt', 'martini-glass'), ('glass-whiskey', 'whiskey-glass'), ('glass-whiskey-rocks', 'whiskey-glass-ice'), ('glasses-alt', 'glasses-round'), ('globe-africa', 'earth-africa'), ('globe-americas', 'earth-americas'), ('globe-asia', 'earth-asia'), ('globe-europe', 'earth-europe'), ('golf-ball', 'golf-ball-tee'), ('grimace', 'face-grimace'), ('grin', 'face-grin'), ('grin-alt', 'face-grin-wide'), ('grin-beam', 'face-grin-beam'), ('grin-beam-sweat', 'face-grin-beam-sweat'), ('grin-hearts', 'face-grin-hearts'), ('grin-squint', 'face-grin-squint'), ('grin-squint-tears', 'face-grin-squint-tears'), ('grin-stars', 'face-grin-stars'), ('grin-tears', 'face-grin-tears'), ('grin-tongue', 'face-grin-tongue'), ('grin-tongue-squint', 'face-grin-tongue-squint'), ('grin-tongue-wink', 'face-grin-tongue-wink'), ('grin-wink', 'face-grin-wink'), ('grip-horizontal', 'grip'), ('h-square', 'square-h'), ('hamburger', 'burger'), ('hand-holding-usd', 'hand-holding-dollar'), ('hand-holding-water', 'hand-holding-droplet'), ('hand-paper', 'hand'), ('hand-receiving', 'hands-holding-diamond'), ('hand-rock', 'hand-back-fist'), ('hands-heart', 'hands-holding-heart'), ('hands-helping', 'handshake-angle'), ('hands-usd', 'hands-holding-dollar'), ('hands-wash', 'hands-bubbles'), ('handshake-alt', 'handshake-simple'), ('handshake-alt-slash', 'handshake-simple-slash'), ('hard-hat', 'helmet-safety'), ('hdd', 'hard-drive'), ('head-vr', 'head-side-goggles'), ('headphones-alt', 'headphones-simple'), ('heart-broken', 'heart-crack'), ('heart-circle', 'circle-heart'), ('heart-rate', 'wave-pulse'), ('heart-square', 'square-heart'), ('heartbeat', 'heart-pulse'), ('hiking', 'person-hiking'), ('history', 'clock-rotate-left'), ('home', 'house'), ('home-alt', 'house'), ('home-heart', 'house-heart'), ('home-lg', 'house-chimney'), ('home-lg-alt', 'house'), ('hospital-alt', 'hospital'), ('hospital-symbol', 'circle-h'), ('hot-tub', 'hot-tub-person'), ('hourglass-half', 'hourglass'), ('house-damage', 'house-chimney-crack'), ('house-leave', 'house-person-leave'), ('house-return', 'house-person-return'), ('hryvnia', 'hryvnia-sign'), ('humidity', 'droplet-percent'), ('icons-alt', 'symbols'), ('id-card-alt', 'id-card-clip'), ('industry-alt', 'industry-windows'), ('info-circle', 'circle-info'), ('info-square', 'square-info'), ('innosoft', '42-group'), ('inventory', 'shelves'), ('journal-whills', 'book-journal-whills'), ('kiss', 'face-kiss'), ('kiss-beam', 'face-kiss-beam'), ('kiss-wink-heart', 'face-kiss-wink-heart'), ('landmark-alt', 'landmark-dome'), ('laptop-house', 'house-laptop'), ('laugh', 'face-laugh'), ('laugh-beam', 'face-laugh-beam'), ('laugh-squint', 'face-laugh-squint'), ('laugh-wink', 'face-laugh-wink'), ('level-down', 'arrow-turn-down'), ('level-down-alt', 'turn-down'), ('level-up', 'arrow-turn-up'), ('level-up-alt', 'turn-up'), ('list-alt', 'rectangle-list'), ('location', 'location-crosshairs'), ('location-circle', 'circle-location-arrow'), ('location-slash', 'location-crosshairs-slash'), ('lock-alt', 'lock-keyhole'), ('lock-open-alt', 'lock-keyhole-open'), ('long-arrow-alt-down', 'down-long'), ('long-arrow-alt-left', 'left-long'), ('long-arrow-alt-right', 'right-long'), ('long-arrow-alt-up', 'up-long'), ('long-arrow-down', 'arrow-down-long'), ('long-arrow-left', 'arrow-left-long'), ('long-arrow-right', 'arrow-right-long'), ('long-arrow-up', 'arrow-up-long'), ('low-vision', 'eye-low-vision'), ('luchador', 'luchador-mask'), ('luggage-cart', 'cart-flatbed-suitcase'), ('magic', 'wand-magic'), ('mail-bulk', 'envelopes-bulk'), ('male', 'person'), ('map-marked', 'map-location'), ('map-marked-alt', 'map-location-dot'), ('map-marker', 'location-pin'), ('map-marker-alt', 'location-dot'), ('map-marker-alt-slash', 'location-dot-slash'), ('map-marker-check', 'location-check'), ('map-marker-edit', 'location-pen'), ('map-marker-exclamation', 'location-exclamation'), ('map-marker-minus', 'location-minus'), ('map-marker-plus', 'location-plus'), ('map-marker-question', 'location-question'), ('map-marker-slash', 'location-pin-slash'), ('map-marker-smile', 'location-smile'), ('map-marker-times', 'location-xmark'), ('map-signs', 'signs-post'), ('mars-stroke-h', 'mars-stroke-right'), ('mars-stroke-v', 'mars-stroke-up'), ('medium-m', 'medium'), ('medkit', 'suitcase-medical'), ('meh', 'face-meh'), ('meh-blank', 'face-meh-blank'), ('meh-rolling-eyes', 'face-rolling-eyes'), ('microphone-alt', 'microphone-lines'), ('microphone-alt-slash', 'microphone-lines-slash'), ('mind-share', 'brain-arrow-curved-right'), ('minus-circle', 'circle-minus'), ('minus-hexagon', 'hexagon-minus'), ('minus-octagon', 'octagon-minus'), ('minus-square', 'square-minus'), ('mobile-alt', 'mobile-screen-button'), ('mobile-android', 'mobile'), ('mobile-android-alt', 'mobile-screen'), ('money-bill-alt', 'money-bill-1'), ('money-bill-wave-alt', 'money-bill-1-wave'), ('money-check-alt', 'money-check-dollar'), ('money-check-edit', 'money-check-pen'), ('money-check-edit-alt', 'money-check-dollar-pen'), ('monitor-heart-rate', 'monitor-waveform'), ('mouse', 'computer-mouse'), ('mouse-alt', 'computer-mouse-scrollwheel'), ('mouse-pointer', 'arrow-pointer'), ('music-alt', 'music-note'), ('music-alt-slash', 'music-note-slash'), ('oil-temp', 'oil-temperature'), ('page-break', 'file-dashed-line'), ('paint-brush', 'paintbrush'), ('paint-brush-alt', 'paintbrush-fine'), ('paint-brush-fine', 'paintbrush-fine'), ('pallet-alt', 'pallet-boxes'), ('paragraph-rtl', 'paragraph-left'), ('parking', 'square-parking'), ('parking-circle', 'circle-parking'), ('parking-circle-slash', 'ban-parking'), ('parking-slash', 'square-parking-slash'), ('pastafarianism', 'spaghetti-monster-flying'), ('pause-circle', 'circle-pause'), ('paw-alt', 'paw-simple'), ('pen-alt', 'pen-clip'), ('pen-square', 'square-pen'), ('pencil-alt', 'pencil'), ('pencil-paintbrush', 'pen-paintbrush'), ('pencil-ruler', 'pen-ruler'), ('pennant', 'flag-pennant'), ('people-arrows', 'people-arrows-left-right'), ('people-carry', 'people-carry-box'), ('percentage', 'percent'), ('person-carry', 'person-carry-box'), ('phone-alt', 'phone-flip'), ('phone-laptop', 'laptop-mobile'), ('phone-square', 'square-phone'), ('phone-square-alt', 'square-phone-flip'), ('photo-video', 'photo-film'), ('plane-alt', 'plane-engines'), ('play-circle', 'circle-play'), ('plus-circle', 'circle-plus'), ('plus-hexagon', 'hexagon-plus'), ('plus-octagon', 'octagon-plus'), ('plus-square', 'square-plus'), ('poll', 'square-poll-vertical'), ('poll-h', 'square-poll-horizontal'), ('portal-enter', 'person-to-portal'), ('portal-exit', 'person-from-portal'), ('portrait', 'image-portrait'), ('pound-sign', 'sterling-sign'), ('pray', 'person-praying'), ('praying-hands', 'hands-praying'), ('prescription-bottle-alt', 'prescription-bottle-medical'), ('presentation', 'presentation-screen'), ('print-search', 'print-magnifying-glass'), ('procedures', 'bed-pulse'), ('project-diagram', 'diagram-project'), ('question-circle', 'circle-question'), ('question-square', 'square-question'), ('quran', 'book-quran'), ('rabbit-fast', 'rabbit-running'), ('radiation-alt', 'circle-radiation'), ('radio-alt', 'radio-tuner'), ('random', 'shuffle'), ('rectangle-landscape', 'rectangle'), ('rectangle-portrait', 'rectangle-vertical'), ('redo', 'arrow-rotate-right'), ('redo-alt', 'rotate-right'), ('remove-format', 'text-slash'), ('repeat-1-alt', 'arrows-repeat-1'), ('repeat-alt', 'arrows-repeat'), ('retweet-alt', 'arrows-retweet'), ('rss-square', 'square-rss'), ('running', 'person-running'), ('sad-cry', 'face-sad-cry'), ('sad-tear', 'face-sad-tear'), ('save', 'floppy-disk'), ('sax-hot', 'saxophone-fire'), ('scalpel-path', 'scalpel-line-dashed'), ('scanner-image', 'scanner'), ('search', 'magnifying-glass'), ('search-dollar', 'magnifying-glass-dollar'), ('search-location', 'magnifying-glass-location'), ('search-minus', 'magnifying-glass-minus'), ('search-plus', 'magnifying-glass-plus'), ('sensor-alert', 'sensor-triangle-exclamation'), ('sensor-smoke', 'sensor-cloud'), ('share-alt', 'share-nodes'), ('share-alt-square', 'square-share-nodes'), ('share-square', 'share-from-square'), ('shield-alt', 'shield-halved'), ('shipping-fast', 'truck-fast'), ('shipping-timed', 'truck-clock'), ('shopping-bag', 'bag-shopping'), ('shopping-basket', 'basket-shopping'), ('shopping-cart', 'cart-shopping'), ('shuttle-van', 'van-shuttle'), ('sign', 'sign-hanging'), ('sign-in', 'arrow-right-to-bracket'), ('sign-in-alt', 'right-to-bracket'), ('sign-language', 'hands'), ('sign-out', 'arrow-right-from-bracket'), ('sign-out-alt', 'right-from-bracket'), ('signal-1', 'signal-weak'), ('signal-2', 'signal-fair'), ('signal-3', 'signal-good'), ('signal-4', 'signal-strong'), ('signal-alt', 'signal-bars'), ('signal-alt-1', 'signal-bars-weak'), ('signal-alt-2', 'signal-bars-fair'), ('signal-alt-3', 'signal-bars-good'), ('signal-alt-slash', 'signal-bars-slash'), ('skating', 'person-skating'), ('ski-jump', 'person-ski-jumping'), ('ski-lift', 'person-ski-lift'), ('skiing', 'person-skiing'), ('skiing-nordic', 'person-skiing-nordic'), ('slack-hash', 'slack'), ('sledding', 'person-sledding'), ('sliders-h', 'sliders'), ('sliders-h-square', 'square-sliders'), ('sliders-v', 'sliders-up'), ('sliders-v-square', 'square-sliders-vertical'), ('smile', 'face-smile'), ('smile-beam', 'face-smile-beam'), ('smile-plus', 'face-smile-plus'), ('smile-wink', 'face-smile-wink'), ('smoking-ban', 'ban-smoking'), ('sms', 'comment-sms'), ('snapchat-ghost', 'snapchat'), ('snowboarding', 'person-snowboarding'), ('snowmobile', 'person-snowmobiling'), ('sort-alpha-down', 'arrow-down-a-z'), ('sort-alpha-down-alt', 'arrow-down-z-a'), ('sort-alpha-up', 'arrow-up-a-z'), ('sort-alpha-up-alt', 'arrow-up-z-a'), ('sort-alt', 'arrow-down-arrow-up'), ('sort-amount-down', 'arrow-down-wide-short'), ('sort-amount-down-alt', 'arrow-down-short-wide'), ('sort-amount-up', 'arrow-up-wide-short'), ('sort-amount-up-alt', 'arrow-up-short-wide'), ('sort-circle', 'circle-sort'), ('sort-circle-down', 'circle-sort-down'), ('sort-circle-up', 'circle-sort-up'), ('sort-numeric-down', 'arrow-down-1-9'), ('sort-numeric-down-alt', 'arrow-down-9-1'), ('sort-numeric-up', 'arrow-up-1-9'), ('sort-numeric-up-alt', 'arrow-up-9-1'), ('sort-shapes-down', 'arrow-down-triangle-square'), ('sort-shapes-down-alt', 'arrow-down-square-triangle'), ('sort-shapes-up', 'arrow-up-triangle-square'), ('sort-shapes-up-alt', 'arrow-up-square-triangle'), ('sort-size-down', 'arrow-down-big-small'), ('sort-size-down-alt', 'arrow-down-small-big'), ('sort-size-up', 'arrow-up-big-small'), ('sort-size-up-alt', 'arrow-up-small-big'), ('soup', 'bowl-hot'), ('space-shuttle', 'shuttle-space'), ('space-station-moon-alt', 'space-station-moon-construction'), ('square-root-alt', 'square-root-variable'), ('star-half-alt', 'star-half-stroke'), ('starfighter-alt', 'starfighter-twin-ion-engine'), ('step-backward', 'backward-step'), ('step-forward', 'forward-step'), ('sticky-note', 'note-sticky'), ('stop-circle', 'circle-stop'), ('store-alt', 'shop'), ('store-alt-slash', 'shop-slash'), ('stream', 'bars-staggered'), ('subway', 'train-subway'), ('surprise', 'face-surprise'), ('swimmer', 'person-swimming'), ('swimming-pool', 'water-ladder'), ('sync', 'arrows-rotate'), ('sync-alt', 'rotate'), ('table-tennis', 'table-tennis-paddle-ball'), ('tablet-alt', 'tablet-screen-button'), ('tablet-android', 'tablet'), ('tablet-android-alt', 'tablet-screen'), ('tachometer', 'gauge-simple'), ('tachometer-alt', 'gauge'), ('tachometer-alt-average', 'gauge-med'), ('tachometer-alt-fast', 'gauge'), ('tachometer-alt-fastest', 'gauge-max'), ('tachometer-alt-slow', 'gauge-low'), ('tachometer-alt-slowest', 'gauge-min'), ('tachometer-average', 'gauge-simple-med'), ('tachometer-fast', 'gauge-simple'), ('tachometer-fastest', 'gauge-simple-max'), ('tachometer-slow', 'gauge-simple-low'), ('tachometer-slowest', 'gauge-simple-min'), ('tanakh', 'book-tanakh'), ('tasks', 'list-check'), ('tasks-alt', 'bars-progress'), ('telegram-plane', 'telegram'), ('temperature-down', 'temperature-arrow-down'), ('temperature-frigid', 'temperature-snow'), ('temperature-hot', 'temperature-sun'), ('temperature-up', 'temperature-arrow-up'), ('tenge', 'tenge-sign'), ('th', 'table-cells'), ('th-large', 'table-cells-large'), ('th-list', 'table-list'), ('theater-masks', 'masks-theater'), ('thermometer-empty', 'temperature-empty'), ('thermometer-full', 'temperature-full'), ('thermometer-half', 'temperature-half'), ('thermometer-quarter', 'temperature-quarter'), ('thermometer-three-quarters', 'temperature-three-quarters'), ('thumb-tack', 'thumbtack'), ('thunderstorm', 'cloud-bolt'), ('thunderstorm-moon', 'cloud-bolt-moon'), ('thunderstorm-sun', 'cloud-bolt-sun'), ('ticket-alt', 'ticket-simple'), ('times', 'xmark'), ('times-circle', 'circle-xmark'), ('times-hexagon', 'hexagon-xmark'), ('times-octagon', 'octagon-xmark'), ('times-square', 'square-xmark'), ('tint', 'droplet'), ('tint-slash', 'droplet-slash'), ('tired', 'face-tired'), ('toilet-paper-alt', 'toilet-paper-blank'), ('tombstone-alt', 'tombstone-blank'), ('tools', 'screwdriver-wrench'), ('torah', 'scroll-torah'), ('tram', 'train-tram'), ('transgender-alt', 'transgender'), ('trash-alt', 'trash-can'), ('trash-restore', 'trash-arrow-up'), ('trash-restore-alt', 'trash-can-arrow-up'), ('trash-undo-alt', 'trash-can-undo'), ('tree-alt', 'tree-deciduous'), ('triangle-music', 'triangle-instrument'), ('trophy-alt', 'trophy-star'), ('truck-couch', 'truck-ramp-couch'), ('truck-loading', 'truck-ramp-box'), ('tshirt', 'shirt'), ('tv-alt', 'tv'), ('undo', 'arrow-rotate-left'), ('undo-alt', 'rotate-left'), ('university', 'building-columns'), ('unlink', 'link-slash'), ('unlock-alt', 'unlock-keyhole'), ('usd-circle', 'circle-dollar'), ('usd-square', 'square-dollar'), ('user-alt', 'user-large'), ('user-alt-slash', 'user-large-slash'), ('user-chart', 'chart-user'), ('user-circle', 'circle-user'), ('user-cog', 'user-gear'), ('user-edit', 'user-pen'), ('user-friends', 'user-group'), ('user-hard-hat', 'user-helmet-safety'), ('user-md', 'user-doctor'), ('user-md-chat', 'user-doctor-message'), ('user-times', 'user-xmark'), ('users-class', 'screen-users'), ('users-cog', 'users-gear'), ('users-crown', 'user-group-crown'), ('utensil-fork', 'fork'), ('utensil-knife', 'knife'), ('utensil-spoon', 'spoon'), ('utensils-alt', 'fork-knife'), ('vhs', 'cassette-vhs'), ('volleyball-ball', 'volleyball'), ('volume-down', 'volume-low'), ('volume-mute', 'volume-xmark'), ('volume-up', 'volume-high'), ('vote-nay', 'xmark-to-slot'), ('vote-yea', 'check-to-slot'), ('walking', 'person-walking'), ('warehouse-alt', 'warehouse-full'), ('washer', 'washing-machine'), ('water-lower', 'water-arrow-down'), ('water-rise', 'water-arrow-up'), ('waveform-path', 'waveform-lines'), ('webcam', 'camera-web'), ('webcam-slash', 'camera-web-slash'), ('weight', 'weight-scale'), ('wifi-1', 'wifi-weak'), ('wifi-2', 'wifi-fair'), ('window-alt', 'window-flip'), ('window-close', 'rectangle-xmark'), ('wine-glass-alt', 'wine-glass-empty')) AS mapping(from_icon, to_icon)\n)\nUPDATE directory_columns\nSET icon =\n CASE\n WHEN icon LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)\n ELSE remaps.to_icon\n END\nFROM remaps\nWHERE icon = remaps.from_icon\n OR icon = CONCAT('fa-', remaps.from_icon)\n OR icon = CONCAT('far-', remaps.from_icon)\n OR icon = CONCAT('fab-', remaps.from_icon)\n OR icon = CONCAT('far fa-', remaps.from_icon)\n OR icon = CONCAT('fab fa-', remaps.from_icon)\n OR icon = CONCAT('fas fa-', remaps.from_icon);\n")
-> 0.0055s
-- execute("UPDATE directory_columns\nSET icon =\nCASE\n WHEN icon LIKE 'fas fa-%' THEN SUBSTRING(icon FROM 8)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fa-%' THEN SUBSTRING(icon FROM 4)\n ELSE icon\nEND\nWHERE icon LIKE 'fa-%'\n OR icon LIKE 'far fa-%'\n OR icon LIKE 'fab fa-%'\n OR icon LIKE 'fas fa-%';\n")
-> 0.0003s
== 20241204085540 RemapToFa6IconNames: migrated (0.0600s) =====================
== 20241205035402 ChangeDefaultForBadgesIcon: migrating =======================
-- change_column_default(:badges, :icon, {:from=>"fa-certificate", :to=>"certificate"})
-> 0.0023s
-- execute("UPDATE badges\nSET icon = 'certificate'\nWHERE icon = 'fa-certificate';\n")
-> 0.0003s
== 20241205035402 ChangeDefaultForBadgesIcon: migrated (0.0032s) ==============
== 20241205162117 AddColumnsToMovedPosts: migrating ===========================
-- add_column(:moved_posts, :old_topic_title, :string)
-> 0.0010s
-- add_column(:moved_posts, :post_user_id, :integer)
-> 0.0003s
-- add_column(:moved_posts, :user_id, :integer)
-> 0.0002s
-- add_index(:moved_posts, [:new_topic_id, :post_user_id])
-> 0.0031s
== 20241205162117 AddColumnsToMovedPosts: migrated (0.0052s) ==================
== 20241206002425 DropExperimentalTopicsFilterSiteSetting: migrating ==========
-- execute("DELETE FROM site_settings\nWHERE name = 'experimental_topics_filter'\n")
-> 0.0002s
== 20241206002425 DropExperimentalTopicsFilterSiteSetting: migrated (0.0006s) =
== 20241206121401 DeleteCategoriesOnlyOptimizedSiteSetting: migrating =========
-- execute("DELETE FROM site_settings WHERE name = 'desktop_category_page_style' AND value = 'categories_only_optimized'")
-> 0.0002s
== 20241206121401 DeleteCategoriesOnlyOptimizedSiteSetting: migrated (0.0005s)
== 20241211030039 RemoveGlimmerPostMenuGroupsSetting: migrating ===============
-- execute("DELETE FROM site_settings\nWHERE name = 'glimmer_post_menu_groups'\n")
-> 0.0002s
== 20241211030039 RemoveGlimmerPostMenuGroupsSetting: migrated (0.0005s) ======
== 20241211222608 AddFullMoveToMovedPostRecords: migrating ====================
-- add_column(:moved_posts, :full_move, :boolean)
-> 0.0003s
== 20241211222608 AddFullMoveToMovedPostRecords: migrated (0.0007s) ===========
== 20241224191732 ChangeFullNameRequiredSetting: migrating ====================
== 20241224191732 ChangeFullNameRequiredSetting: migrated (0.0012s) ===========
== 20241226162229 AddChatSendShortcutPreference: migrating ====================
-- add_column(:user_options, :chat_send_shortcut, :integer, {:default=>0, :null=>false})
-> 0.0007s
== 20241226162229 AddChatSendShortcutPreference: migrated (0.0011s) ===========
== 20250115031117 RemoveUserProfileFromOverriddenRobots: migrating ============
-- select_value("SELECT value FROM site_settings WHERE name = 'overridden_robots_txt' AND value LIKE '%User-agent: *\nDisallow: /admin/\nDisallow: /auth/\nDisallow: /assets/browser-update*.js\nDisallow: /email/\nDisallow: /session\nDisallow: /user-api-key\nDisallow: /*?api_key*\nDisallow: /*?*api_key*\nDisallow: /badges\nDisallow: /u/%'")
-> 0.0002s
== 20250115031117 RemoveUserProfileFromOverriddenRobots: migrated (0.0006s) ===
== 20250116024516 UpdateFontSiteSettingsType: migrating =======================
-- execute("UPDATE site_settings SET data_type=8 WHERE name IN('base_font', 'heading_font')")
-> 0.0002s
== 20250116024516 UpdateFontSiteSettingsType: migrated (0.0005s) ==============
== 20250117065027 SetDefaultFontForExistingSites: migrating ===================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('base_font', 8, 'arial', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0002s
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('heading_font', 8, 'arial', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0002s
== 20250117065027 SetDefaultFontForExistingSites: migrated (0.0029s) ==========
== 20250119222805 FillFastTypingThresholdBasedOnDeprecatedSetting: migrating ==
== 20250119222805 FillFastTypingThresholdBasedOnDeprecatedSetting: migrated (0.0005s)
== 20250120115539 AddDarkHexToColorSchemeColor: migrating =====================
-- add_column(:color_scheme_colors, :dark_hex, :string, {:limit=>6})
-> 0.0004s
== 20250120115539 AddDarkHexToColorSchemeColor: migrated (0.0007s) ============
== 20250121180125 CreateThemeColorScheme: migrating ===========================
-- create_table(:theme_color_schemes)
-> 0.0039s
-- add_index(:theme_color_schemes, :theme_id, {:unique=>true})
-> 0.0027s
-- add_index(:theme_color_schemes, :color_scheme_id, {:unique=>true})
-> 0.0029s
== 20250121180125 CreateThemeColorScheme: migrated (0.0100s) ==================
== 20250124062108 RemapDeprecatedIconNamesForSeededBadges: migrating ==========
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon\n FROM (VALUES ('smile', 'face-smile'), ('share-alt', 'share-nodes'))\n AS mapping(from_icon, to_icon)\n)\nUPDATE badges\nSET icon = remaps.to_icon\nFROM remaps\nWHERE icon = remaps.from_icon;\n")
-> 0.0005s
== 20250124062108 RemapDeprecatedIconNamesForSeededBadges: migrated (0.0009s) =
== 20250130205841 FixIncorrectFastTypingThresholdSetting: migrating ===========
-- execute("UPDATE site_settings SET value = 'disabled' WHERE name = 'fast_typing_threshold' AND value = 'off'")
-> 0.0002s
== 20250130205841 FixIncorrectFastTypingThresholdSetting: migrated (0.0005s) ==
== 20250205174221 AddSerializeTopicOpLikesDataThemeModifier: migrating ========
-- add_column(:theme_modifier_sets, :serialize_topic_op_likes_data, :boolean, {:null=>true})
-> 0.0004s
== 20250205174221 AddSerializeTopicOpLikesDataThemeModifier: migrated (0.0007s)
== 20250212044021 RenameAllowAllUsersToFlagIllegalContentSiteSetting: migrating
-- execute("UPDATE site_settings SET name = 'allow_all_users_to_flag_illegal_content' where name = 'allow_tl0_and_anonymous_users_to_flag_illegal_content'")
-> 0.0002s
== 20250212044021 RenameAllowAllUsersToFlagIllegalContentSiteSetting: migrated (0.0005s)
== 20250212045125 AddTypeSourceToReviewable: migrating ========================
-- add_column(:reviewables, :type_source, :string, {:null=>false, :default=>"unknown"})
-> 0.0006s
== 20250212045125 AddTypeSourceToReviewable: migrated (0.0023s) ===============
== 20250217003916 XSummaryLargeImageBasedOnDeprecatedSetting: migrating =======
== 20250217003916 XSummaryLargeImageBasedOnDeprecatedSetting: migrated (0.0007s)
== 20250220045740 AddContextToReviewableScores: migrating =====================
-- add_column(:reviewable_scores, :context, :string)
-> 0.0004s
== 20250220045740 AddContextToReviewableScores: migrated (0.0007s) ============
== 20250220090521 AddLastUnreadMessageWhenEmailedIdToChatThreadMemberships: migrating
-- add_column(:user_chat_thread_memberships, :last_unread_message_when_emailed_id, :bigint)
-> 0.0003s
== 20250220090521 AddLastUnreadMessageWhenEmailedIdToChatThreadMemberships: migrated (0.0006s)
== 20250227142351 MigrateSidekiqJobs: migrating ===============================
== 20250227142351 MigrateSidekiqJobs: migrated (0.0025s) ======================
== 20250304034313 AddComposerColumnsToPostStat: migrating =====================
-- add_column(:post_stats, :composer_version, :integer)
-> 0.0004s
-- add_column(:post_stats, :writing_device, :string)
-> 0.0032s
-- add_column(:post_stats, :writing_device_user_agent, :string)
-> 0.0003s
== 20250304034313 AddComposerColumnsToPostStat: migrated (0.0044s) ============
== 20250304054720 AddScopeModeToApiKeys: migrating ============================
-- add_column(:api_keys, :scope_mode, :integer, {:null=>true})
-> 0.0004s
== 20250304054720 AddScopeModeToApiKeys: migrated (0.0007s) ===================
== 20250304074934 BackfillApiKeyScopeModes: migrating =========================
== 20250304074934 BackfillApiKeyScopeModes: migrated (0.0010s) ================
== 20250305233449 PopulateTypeSourceInReviewable: migrating ===================
== 20250305233449 PopulateTypeSourceInReviewable: migrated (0.0020s) ==========
== 20250307031538 MigrateCategoryToCategoriesPostCreated: migrating ===========
-- execute("DELETE FROM discourse_automation_fields\nWHERE name = 'restricted_categories'\n AND target = 'trigger'\n AND automation_id IN (\n SELECT id FROM discourse_automation_automations\n WHERE trigger = 'post_created_edited'\n )\n")
-> 0.0004s
-- execute("INSERT INTO discourse_automation_fields (\n automation_id, component, name, target, metadata, created_at, updated_at\n)\nSELECT\n f.automation_id,\n 'categories' as component,\n 'restricted_categories' as name,\n f.target,\n jsonb_build_object('value', ARRAY[CAST(f.metadata->>'value' AS INTEGER)]) as metadata,\n NOW() as created_at,\n NOW() as updated_at\nFROM discourse_automation_fields f\nJOIN discourse_automation_automations a ON a.id = f.automation_id\nWHERE f.component = 'category'\nAND f.name = 'restricted_category'\nAND f.target = 'trigger'\nAND f.metadata->>'value' IS NOT NULL\nAND a.trigger = 'post_created_edited'\n")
-> 0.0003s
== 20250307031538 MigrateCategoryToCategoriesPostCreated: migrated (0.0011s) ==
== 20250307034117 RemoveOldAdminSidebarEnabledGroupsSiteSettings: migrating ===
-- execute("DELETE FROM site_settings WHERE name = 'admin_sidebar_enabled_groups'")
-> 0.0002s
== 20250307034117 RemoveOldAdminSidebarEnabledGroupsSiteSettings: migrated (0.0006s)
== 20250311041851 AddIndexToPostStatComposerColumns: migrating ================
-- remove_index(:post_stats, :composer_version, {:algorithm=>:concurrently, :if_exists=>true})
-> 0.0014s
-- remove_index(:post_stats, :writing_device, {:algorithm=>:concurrently, :if_exists=>true})
-> 0.0011s
-- add_index(:post_stats, :composer_version, {:algorithm=>:concurrently})
-> 0.0032s
-- add_index(:post_stats, :writing_device, {:algorithm=>:concurrently})
-> 0.0028s
== 20250311041851 AddIndexToPostStatComposerColumns: migrated (0.0091s) =======
== 20250311073009 EnableWelcomeBannerNewSites: migrating ======================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('enable_welcome_banner', 5, 'f', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0003s
== 20250311073009 EnableWelcomeBannerNewSites: migrated (0.0012s) =============
== 20250313044812 RemoveUniqueConstraintFromTagUsersIndexes: migrating ========
-- remove_index(:tag_users, {:name=>:idx_tag_users_ix1, :algorithm=>:concurrently, :if_exists=>true})
-> 0.0079s
-- remove_index(:tag_users, {:name=>:idx_tag_users_ix2, :algorithm=>:concurrently, :if_exists=>true})
-> 0.0074s
-- remove_index(:tag_users, [:user_id, :tag_id, :notification_level], {:algorithm=>:concurrently, :if_exists=>true})
-> 0.0014s
-- remove_index(:tag_users, [:tag_id, :user_id, :notification_level], {:algorithm=>:concurrently, :if_exists=>true})
-> 0.0011s
-- add_index(:tag_users, [:user_id, :tag_id, :notification_level], {:algorithm=>:concurrently})
-> 0.0028s
-- add_index(:tag_users, [:tag_id, :user_id, :notification_level], {:algorithm=>:concurrently})
-> 0.0028s
== 20250313044812 RemoveUniqueConstraintFromTagUsersIndexes: migrated (0.0242s)
== 20250313045010 AddIndexToUsersIpAddress: migrating =========================
-- remove_index(:users, :ip_address, {:algorithm=>:concurrently, :name=>"idx_users_ip_address", :if_exists=>true})
-> 0.0032s
-- add_index(:users, :ip_address, {:algorithm=>:concurrently, :name=>"idx_users_ip_address"})
-> 0.0034s
== 20250313045010 AddIndexToUsersIpAddress: migrated (0.0073s) ================
[2025-03-19 02:09:40] Reconnecting to the database...
[2025-03-19 02:09:40] Reloading site settings...
[2025-03-19 02:09:40] Disabling outgoing emails for non-staff users...
[2025-03-19 02:09:40] Disabling readonly mode...
[2025-03-19 02:09:40] Clearing category cache...
[2025-03-19 02:09:40] Reloading translations...
[2025-03-19 02:09:40] Remapping uploads...
[2025-03-19 02:09:40] Restoring uploads, this may take a while...
[2025-03-19 02:10:00] EXCEPTION: 1 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.
[2025-03-19 02:10:00] /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:81:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:383:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:354:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:167:in `restore_uploads'
/var/www/discourse/lib/backup_restore/restorer.rb:71:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:20:in `restore'
/var/www/discourse/script/spawn_backup_restore.rb:33:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2025-03-19 02:10:00] Trying to rollback...
[2025-03-19 02:10:00] Rolling back...
[2025-03-19 02:10:00] Cleaning stuff up...
[2025-03-19 02:10:00] Dropping functions from the discourse_functions schema...
[2025-03-19 02:10:00] Removing tmp '/var/www/discourse/tmp/restores/default/2025-03-19-020905' directory...
[2025-03-19 02:10:00] Unpausing sidekiq...
[2025-03-19 02:10:00] Marking restore as finished...
[2025-03-19 02:10:00] Notifying 'Admin' of the end of the restore...
我猜如果那没用的话,我可以分块发布。
2025-03-19 02:09:05] [STARTED]
[2025-03-19 02:09:05] 'Admin' has started the restore!
[2025-03-19 02:09:05] Marking restore as running...
[2025-03-19 02:09:05] Making sure /var/www/discourse/tmp/restores/default/2025-03-19-020905 exists...
[2025-03-19 02:09:05] Copying archive to tmp directory...
[2025-03-19 02:09:05] Unzipping archive, this may take a while...
[2025-03-19 02:09:06] Extracting dump file...
[2025-03-19 02:09:09] Validating metadata...
[2025-03-19 02:09:09] Current version: 20250313045010
[2025-03-19 02:09:09] Restored version: 20210111025920
[2025-03-19 02:09:09] Enabling readonly mode...
[2025-03-19 02:09:09] Pausing sidekiq...
[2025-03-19 02:09:09] Waiting up to 60 seconds for Sidekiq to finish running jobs...
[2025-03-19 02:09:15] Creating missing functions in the discourse_functions schema...
[2025-03-19 02:09:15] Restoring dump file... (this may take a while)
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] set_config
[2025-03-19 02:09:15] ------------
[2025-03-19 02:09:15] (1 row)
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] SET
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] COMMENT
[2025-03-19 02:09:15] COMMENT
[2025-03-19 02:09:15] COMMENT
[2025-03-19 02:09:15] COMMENT
[2025-03-19 02:09:15] COMMENT
[2025-03-19 02:09:15] COMMENT
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] COMMENT
[2025-03-19 02:09:15] CREATE VIEW
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:15] CREATE SEQUENCE
[2025-03-19 02:09:15] ALTER SEQUENCE
[2025-03-19 02:09:15] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] CREATE TABLE
[2025-03-19 02:09:16] CREATE SEQUENCE
[2025-03-19 02:09:16] ALTER SEQUENCE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] ALTER TABLE
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 1
[2025-03-19 02:09:16] COPY 3331
[2025-03-19 02:09:16] COPY 1
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 6
[2025-03-19 02:09:16] COPY 5
[2025-03-19 02:09:16] COPY 3
[2025-03-19 02:09:16] COPY 50
[2025-03-19 02:09:16] COPY 1
[2025-03-19 02:09:16] COPY 12
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 80
[2025-03-19 02:09:16] COPY 44
[2025-03-19 02:09:16] COPY 1
[2025-03-19 02:09:16] COPY 11
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 1
[2025-03-19 02:09:16] COPY 6
[2025-03-19 02:09:16] COPY 30
[2025-03-19 02:09:16] COPY 3
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 834
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 190
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 8
[2025-03-19 02:09:16] COPY 172
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 60
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 299
[2025-03-19 02:09:16] COPY 9
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 7
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 97
[2025-03-19 02:09:16] COPY 9
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 6
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 503
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 35
[2025-03-19 02:09:16] COPY 277
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 8
[2025-03-19 02:09:16] COPY 12
[2025-03-19 02:09:16] COPY 32
[2025-03-19 02:09:16] COPY 5
[2025-03-19 02:09:16] COPY 7
[2025-03-19 02:09:16] COPY 163
[2025-03-19 02:09:16] COPY 133
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 65
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 44
[2025-03-19 02:09:16] COPY 284
[2025-03-19 02:09:16] COPY 346
[2025-03-19 02:09:16] COPY 2476
[2025-03-19 02:09:16] COPY 30
[2025-03-19 02:09:16] COPY 357
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 2
[2025-03-19 02:09:16] COPY 3
[2025-03-19 02:09:16] COPY 3
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 6
[2025-03-19 02:09:16] COPY 3
[2025-03-19 02:09:16] COPY 3
[2025-03-19 02:09:16] COPY 124880
[2025-03-19 02:09:16] COPY 1126
[2025-03-19 02:09:16] COPY 1126
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 5
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 25
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:16] COPY 131
[2025-03-19 02:09:16] COPY 0
[2025-03-19 02:09:29] COPY 2672
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 15
[2025-03-19 02:09:29] COPY 3
[2025-03-19 02:09:29] COPY 8
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 5
[2025-03-19 02:09:29] COPY 38
[2025-03-19 02:09:29] COPY 19
[2025-03-19 02:09:29] COPY 103
[2025-03-19 02:09:29] COPY 7
[2025-03-19 02:09:29] COPY 16
[2025-03-19 02:09:29] COPY 1
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 9
[2025-03-19 02:09:29] COPY 145
[2025-03-19 02:09:29] COPY 114
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 30
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 672
[2025-03-19 02:09:29] COPY 2365
[2025-03-19 02:09:29] COPY 139
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 49
[2025-03-19 02:09:29] COPY 718
[2025-03-19 02:09:29] COPY 8
[2025-03-19 02:09:29] COPY 3
[2025-03-19 02:09:29] COPY 26
[2025-03-19 02:09:29] COPY 5
[2025-03-19 02:09:29] COPY 8
[2025-03-19 02:09:29] COPY 2
[2025-03-19 02:09:29] COPY 143
[2025-03-19 02:09:29] COPY 272
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 143
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 855
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 143
[2025-03-19 02:09:29] COPY 1041
[2025-03-19 02:09:29] COPY 143
[2025-03-19 02:09:29] COPY 143
[2025-03-19 02:09:29] COPY 21
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 143
[2025-03-19 02:09:29] COPY 46
[2025-03-19 02:09:29] COPY 567
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 143
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 136
[2025-03-19 02:09:29] COPY 11
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] COPY 0
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 3335
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 3268
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 6
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 4
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 102
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 2
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 12
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 106
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1154
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 5
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 9
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 40
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 4
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 859
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 283
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 269
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 208
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 194
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 927
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 40
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 7
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 97
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 9
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 14
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 688
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 35
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 2221
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 11
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 16
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 5
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 9
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 163
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 234
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 49
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 346
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 118
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 372
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 6
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 7
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 3
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 6
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 3
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 3
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] ---------
[2025-03-19 02:09:29] 1611117
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1126
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 6
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 31
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 2031
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 4259
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 26
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 3
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 8
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 6
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 48
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 19
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 108
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 10
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 16
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 10
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 264
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 30
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 678
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 140
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 72
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 783
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 8
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 4
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 26
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 7
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 4442
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 284
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 157
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 298
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 8
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 155
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 855
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1041
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 23
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 57
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 576
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 155
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1648
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 14
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] setval
[2025-03-19 02:09:29] --------
[2025-03-19 02:09:29] 1
[2025-03-19 02:09:29] (1 row)
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:29] ALTER TABLE
[2025-03-19 02:09:30] ALTER TABLE
[2025-03-19 02:09:30] ALTER TABLE
[2025-03-19 02:09:30] ALTER TABLE
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:30] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE INDEX
[2025-03-19 02:09:31] CREATE TRIGGER
[2025-03-19 02:09:31] CREATE TRIGGER
[2025-03-19 02:09:31] CREATE TRIGGER
[2025-03-19 02:09:31] CREATE TRIGGER
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] ALTER TABLE
[2025-03-19 02:09:31] Migrating the database...
[2025-03-19 02:09:40] == 20190601000001 CreateAutomationsTable: migrating ===========================
-- create_table(:discourse_automation_automations)
-> 0.0091s
-- create_table(:discourse_automation_fields)
-> 0.0061s
-- create_table(:discourse_automation_triggers)
-> 0.0060s
-- create_table(:discourse_automation_pending_automations)
-> 0.0034s
== 20190601000001 CreateAutomationsTable: migrated (0.0265s) ==================
== 20201223071241 DeleteStaleCategorySearchPrioritiesFromSiteSettings: migrating
-- execute("DELETE FROM site_settings WHERE name IN ('category_search_priority_very_low_weight', 'category_search_priority_very_high_weight')\n")
-> 0.0006s
== 20201223071241 DeleteStaleCategorySearchPrioritiesFromSiteSettings: migrated (0.0012s)
== 20210106181418 CreateUserNotificationSchedules: migrating ==================
-- create_table(:user_notification_schedules)
-> 0.0043s
-- add_index(:user_notification_schedules, [:user_id], {:name=>"index_user_notification_schedules_on_user_id"})
-> 0.0026s
-- add_index(:user_notification_schedules, [:enabled], {:name=>"index_user_notification_schedules_on_enabled"})
-> 0.0024s
-- add_column(:do_not_disturb_timings, :scheduled, :boolean, {:default=>false})
-> 0.0008s
-- add_index(:do_not_disturb_timings, [:scheduled], {:name=>"index_do_not_disturb_timings_on_scheduled"})
-> 0.0025s
== 20210106181418 CreateUserNotificationSchedules: migrated (0.0135s) =========
== 20210108134117 AddPendingPmsTable: migrating ===============================
-- create_table(:discourse_automation_pending_pms)
-> 0.0067s
== 20210108134117 AddPendingPmsTable: migrated (0.0072s) ======================
== 20210119005647 AddCreatedViaToIncomingEmail: migrating =====================
-- add_column(:incoming_emails, :created_via, :integer, {:null=>true})
-> 0.0005s
== 20210119005647 AddCreatedViaToIncomingEmail: migrated (0.0010s) ============
== 20210120125607 RenameEnglishLocale: migrating ==============================
-- execute("UPDATE users\nSET locale = 'en_GB'\nWHERE locale = 'en'\n")
-> 0.0007s
-- execute("UPDATE site_settings\nSET value = 'en_GB'\nWHERE name = 'default_locale' AND value = 'en'\n")
-> 0.0002s
-- execute("UPDATE translation_overrides\nSET locale = 'en_GB'\nWHERE locale = 'en'\n")
-> 0.0004s
-- execute("UPDATE theme_translation_overrides\nSET locale = 'en_GB'\nWHERE locale = 'en'\n")
-> 0.0005s
-- execute("UPDATE users\nSET locale = 'en'\nWHERE locale = 'en_US'\n")
-> 0.0024s
-- execute("UPDATE site_settings\nSET value = 'en'\nWHERE name = 'default_locale' AND value = 'en_US'\n")
-> 0.0003s
-- execute("UPDATE translation_overrides\nSET locale = 'en'\nWHERE locale = 'en_US'\n")
-> 0.0002s
-- execute("UPDATE theme_translation_overrides\nSET locale = 'en'\nWHERE locale = 'en_US'\n")
-> 0.0002s
== 20210120125607 RenameEnglishLocale: migrated (0.0054s) =====================
== 20210121001720 ChangeIncomingEmailCreatedAtNull: migrating =================
-- change_column_default(:incoming_emails, :created_via, 0)
-> 0.0032s
-- change_column_null(:incoming_emails, :created_via, false, nil)
-> 0.0002s
== 20210121001720 ChangeIncomingEmailCreatedAtNull: migrated (0.0046s) ========
== 20210125100452 MigrateSearchDataAfterDefaultLocaleRename: migrating ========
Migrating category_search_data to new locale.
-- execute("UPDATE category_search_data\n SET locale = 'en'\n WHERE category_id IN (\n SELECT category_id\n FROM category_search_data\n WHERE locale = 'en_US'\n LIMIT 100000\n )\n")
-> 0.0008s
Migrated 11 rows of category_search_data to new locale.
-- execute("UPDATE category_search_data\n SET locale = 'en'\n WHERE category_id IN (\n SELECT category_id\n FROM category_search_data\n WHERE locale = 'en_US'\n LIMIT 100000\n )\n")
-> 0.0003s
Migrating tag_search_data to new locale.
-- execute("UPDATE tag_search_data\n SET locale = 'en'\n WHERE tag_id IN (\n SELECT tag_id\n FROM tag_search_data\n WHERE locale = 'en_US'\n LIMIT 100000\n )\n")
-> 0.0005s
Migrating topic_search_data to new locale.
-- execute("UPDATE topic_search_data\n SET locale = 'en'\n WHERE topic_id IN (\n SELECT topic_id\n FROM topic_search_data\n WHERE locale = 'en_US'\n LIMIT 100000\n )\n")
-> 0.0022s
Migrated 114 rows of topic_search_data to new locale.
-- execute("UPDATE topic_search_data\n SET locale = 'en'\n WHERE topic_id IN (\n SELECT topic_id\n FROM topic_search_data\n WHERE locale = 'en_US'\n LIMIT 100000\n )\n")
-> 0.0004s
Migrating user_search_data to new locale.
-- execute("UPDATE user_search_data\n SET locale = 'en'\n WHERE user_id IN (\n SELECT user_id\n FROM user_search_data\n WHERE locale = 'en_US'\n LIMIT 100000\n )\n")
-> 0.0015s
Migrated 143 rows of user_search_data to new locale.
-- execute("UPDATE user_search_data\n SET locale = 'en'\n WHERE user_id IN (\n SELECT user_id\n FROM user_search_data\n WHERE locale = 'en_US'\n LIMIT 100000\n )\n")
-> 0.0003s
== 20210125100452 MigrateSearchDataAfterDefaultLocaleRename: migrated (0.0067s)
== 20210126222142 CreateShelvedNotifications: migrating =======================
-- create_table(:shelved_notifications)
-> 0.0043s
-- add_index(:shelved_notifications, [:notification_id], {:name=>"index_shelved_notifications_on_notification_id"})
-> 0.0026s
== 20210126222142 CreateShelvedNotifications: migrated (0.0077s) ==============
== 20210127013637 AddUploadSecurityLogColumns: migrating ======================
-- add_column(:uploads, :security_last_changed_at, :timestamp, {:null=>true, :precision=>nil})
-> 0.0006s
-- add_column(:uploads, :security_last_changed_reason, :string, {:null=>true})
-> 0.0003s
== 20210127013637 AddUploadSecurityLogColumns: migrated (0.0014s) =============
== 20210127140730 UndoAddProcessedToNotifications: migrating ==================
-- execute("ALTER TABLE notifications DROP COLUMN IF EXISTS processed")
-> 0.0007s
== 20210127140730 UndoAddProcessedToNotifications: migrated (0.0012s) =========
== 20210128021147 AddAllowUnknownSenderTopicRepliesToGroup: migrating =========
-- add_column(:groups, :allow_unknown_sender_topic_replies, :boolean, {:default=>false, :null=>false})
-> 0.0010s
== 20210128021147 AddAllowUnknownSenderTopicRepliesToGroup: migrated (0.0015s)
== 20210131221311 CreateDismissedTopicUsersTable: migrating ===================
-- create_table(:dismissed_topic_users)
-> 0.0042s
-- add_index(:dismissed_topic_users, [:user_id, :topic_id], {:unique=>true, :name=>"index_dismissed_topic_users_on_user_id_and_topic_id"})
-> 0.0032s
== 20210131221311 CreateDismissedTopicUsersTable: migrated (0.0080s) ==========
== 20210201034048 MoveCategoryLastSeenAtToNewTable: migrating =================
== 20210201034048 MoveCategoryLastSeenAtToNewTable: migrated (0.0067s) ========
== 20210203031628 AddDurationMinutesToTopicTimer: migrating ===================
-- add_column(:topic_timers, :duration_minutes, :integer)
-> 0.0005s
== 20210203031628 AddDurationMinutesToTopicTimer: migrated (0.0016s) ==========
== 20210204135429 RenameSsoSiteSettings: migrating ============================
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'enable_discourse_connect', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'enable_sso'\n")
-> 0.0006s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_allows_all_return_paths', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_allows_all_return_paths'\n")
-> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'enable_discourse_connect_provider', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'enable_sso_provider'\n")
-> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'verbose_discourse_connect_logging', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'verbose_sso_logging'\n")
-> 0.0003s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_url', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_url'\n")
-> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_secret', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_secret'\n")
-> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_provider_secrets', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_provider_secrets'\n")
-> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_groups', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_groups'\n")
-> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_bio', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_bio'\n")
-> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_overrides_email', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_email'\n")
-> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_overrides_username', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_username'\n")
-> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_overrides_name', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_name'\n")
-> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_avatar', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_avatar'\n")
-> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_profile_background', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_profile_background'\n")
-> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_location', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_location'\n")
-> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_website', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_website'\n")
-> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_card_background', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_card_background'\n")
-> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_skip_create_confirm', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'external_auth_skip_create_confirm'\n")
-> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_immediately', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'external_auth_immediately'\n")
-> 0.0002s
== 20210204135429 RenameSsoSiteSettings: migrated (0.0045s) ===================
== 20210204195932 AddReplacementToWatchedWords: migrating =====================
-- add_column(:watched_words, :replacement, :string, {:null=>true})
-> 0.0004s
== 20210204195932 AddReplacementToWatchedWords: migrated (0.0008s) ============
== 20210207232853 FixTopicTimerDurationMinutes: migrating =====================
== 20210207232853 FixTopicTimerDurationMinutes: migrated (0.0009s) ============
== 20210215231312 FixGroupFlairAvatarUploadSecurityAndAcls: migrating =========
== 20210215231312 FixGroupFlairAvatarUploadSecurityAndAcls: migrated (0.0008s)
== 20210218022739 MoveNewSinceToNewTableAgain: migrating ======================
== 20210218022739 MoveNewSinceToNewTableAgain: migrated (0.0100s) =============
== 20210218144656 AddIsFavoriteToUserBadge: migrating =========================
-- add_column(:user_badges, :is_favorite, :boolean)
-> 0.0005s
== 20210218144656 AddIsFavoriteToUserBadge: migrated (0.0009s) ================
== 20210219171329 DropOldSsoSiteSettings: migrating ===========================
-- execute("DELETE FROM site_settings\nWHERE name IN (\n 'enable_sso',\n 'sso_allows_all_return_paths',\n 'enable_sso_provider',\n 'verbose_sso_logging',\n 'sso_url',\n 'sso_secret',\n 'sso_provider_secrets',\n 'sso_overrides_groups',\n 'sso_overrides_bio',\n 'sso_overrides_email',\n 'sso_overrides_username',\n 'sso_overrides_name',\n 'sso_overrides_avatar',\n 'sso_overrides_profile_background',\n 'sso_overrides_location',\n 'sso_overrides_website',\n 'sso_overrides_card_background',\n 'external_auth_skip_create_confirm',\n 'external_auth_immediately'\n)\n")
-> 0.0002s
== 20210219171329 DropOldSsoSiteSettings: migrated (0.0006s) ==================
== 20210224162050 RemoveEmojiOneFromEmojiSetSiteSetting: migrating ============
-- execute("SELECT value FROM site_settings WHERE name='emoji_set' and value='emoji_one'")
-> 0.0002s
== 20210224162050 RemoveEmojiOneFromEmojiSetSiteSetting: migrated (0.0006s) ===
== 20210225230057 CreateChatTables: migrating =================================
-- create_table(:topic_chats)
-> 0.0075s
-- create_table(:topic_chat_messages)
-> 0.0095s
-- add_index(:topic_chat_messages, [:topic_id, :created_at], {:name=>"index_topic_chat_messages_on_topic_id_and_created_at"})
-> 0.0024s
== 20210225230057 CreateChatTables: migrated (0.0202s) ========================
== 20210302164429 DropFlashOneboxSiteSetting: migrating =======================
-- execute("DELETE FROM site_settings\nWHERE name = 'enable_flash_video_onebox'\n")
-> 0.0002s
== 20210302164429 DropFlashOneboxSiteSetting: migrated (0.0006s) ==============
== 20210308010745 DeleteOrphanPostActions: migrating ==========================
-- execute("DELETE FROM post_actions\nUSING post_actions pa\nLEFT JOIN posts ON posts.id = pa.post_id\nWHERE posts.id IS NULL\nAND post_actions.id = pa.id\n")
-> 0.0016s
== 20210308010745 DeleteOrphanPostActions: migrated (0.0019s) =================
== 20210308195916 AddUniqueIndexToInvitedGroups: migrating ====================
-- execute("DELETE FROM invited_groups a\nUSING invited_groups b\nWHERE a.id < b.id\n AND a.invite_id = b.invite_id\n AND a.group_id = b.group_id\n")
-> 0.0005s
-- add_index(:invited_groups, [:group_id, :invite_id], {:unique=>true, :name=>"index_invited_groups_on_group_id_and_invite_id"})
-> 0.0032s
== 20210308195916 AddUniqueIndexToInvitedGroups: migrated (0.0042s) ===========
== 20210311022303 DropShowFilterByTagSiteSetting: migrating ===================
-- execute("DELETE FROM site_settings\nWHERE name = 'show_filter_by_tag'\n")
-> 0.0002s
== 20210311022303 DropShowFilterByTagSiteSetting: migrated (0.0006s) ==========
== 20210311070755 AddImageUploadIdToBadges: migrating =========================
-- add_column(:badges, :image_upload_id, :integer)
-> 0.0005s
== 20210311070755 AddImageUploadIdToBadges: migrated (0.0024s) ================
== 20210315173137 SetDisableMailingListMode: migrating ========================
-- execute("SELECT COUNT(*) FROM user_options WHERE mailing_list_mode")
-> 0.0003s
== 20210315173137 SetDisableMailingListMode: migrated (0.0007s) ===============
== 20210318020143 AddPinnedColumnToBookmarks: migrating =======================
-- add_column(:bookmarks, :pinned, :boolean, {:default=>false})
-> 0.0007s
== 20210318020143 AddPinnedColumnToBookmarks: migrated (0.0013s) ==============
== 20210323142518 UpdateInvitesRedemptionCount: migrating =====================
-- execute("WITH invite_counts AS (\n SELECT invite_id, COUNT(*) count\n FROM invited_users\n GROUP BY invite_id\n)\nUPDATE invites\nSET redemption_count = GREATEST(redemption_count, count)\nFROM invite_counts\nWHERE invites.id = invite_counts.invite_id\n")
-> 0.0010s
== 20210323142518 UpdateInvitesRedemptionCount: migrated (0.0014s) ============
== 20210324043327 DeleteOrphanPostRevisions: migrating ========================
-- execute("DELETE FROM post_revisions\nUSING post_revisions pr\nLEFT JOIN posts ON posts.id = pr.post_id\nWHERE posts.id IS NULL\nAND post_revisions.id = pr.id\n")
-> 0.0008s
== 20210324043327 DeleteOrphanPostRevisions: migrated (0.0012s) ===============
== 20210328233843 FixBookmarksWithIncorrectTopicId: migrating =================
== 20210328233843 FixBookmarksWithIncorrectTopicId: migrated (0.0016s) ========
== 20210403025854 AddActionCodeToTopicChatMessage: migrating ==================
-- add_column(:topic_chat_messages, :action_code, :string, {:null=>true})
-> 0.0005s
== 20210403025854 AddActionCodeToTopicChatMessage: migrated (0.0008s) =========
== 20210406060434 FixTopicUserBookmarkedSyncIssuesAgain: migrating ============
== 20210406060434 FixTopicUserBookmarkedSyncIssuesAgain: migrated (0.0014s) ===
== 20210409142455 AddTokenToInvites: migrating ================================
-- add_column(:invites, :email_token, :string)
-> 0.0005s
== 20210409142455 AddTokenToInvites: migrated (0.0015s) =======================
== 20210414013318 AddCategorySettingAllowUnlimitedOwnerEditsOp: migrating =====
-- add_column(:categories, :allow_unlimited_owner_edits_on_first_post, :boolean, {:default=>false, :null=>false})
-> 0.0008s
== 20210414013318 AddCategorySettingAllowUnlimitedOwnerEditsOp: migrated (0.0013s)
== 20210420015635 AddSearchableToUserFields: migrating ========================
-- add_column(:user_fields, :searchable, :boolean, {:default=>false, :null=>false})
-> 0.0006s
== 20210420015635 AddSearchableToUserFields: migrated (0.0009s) ===============
== 20210426193009 MoveApprovedQueuedPostsTopicAndPostData: migrating ==========
== 20210426193009 MoveApprovedQueuedPostsTopicAndPostData: migrated (0.0013s) =
== 20210512090204 AddTimestampsToAutomations: migrating =======================
-- add_column(:discourse_automation_automations, :last_updated_by_id, :integer, {:null=>true})
-> 0.0004s
-- execute("ALTER TABLE discourse_automation_automations ALTER COLUMN last_updated_by_id SET NOT NULL;\n")
-> 0.0002s
== 20210512090204 AddTimestampsToAutomations: migrated (0.0013s) ==============
== 20210513125608 RemoveLengthConstrainFromTopicExcerpt: migrating ============
-- change_column(:topics, :excerpt, :string, {:null=>true})
-> 0.0004s
== 20210513125608 RemoveLengthConstrainFromTopicExcerpt: migrated (0.0008s) ===
== 20210517061815 AddDedicatedEnableImapSmtpColumnsForGroup: migrating ========
-- add_column(:groups, :smtp_enabled, :boolean, {:default=>false})
-> 0.0006s
-- add_column(:groups, :smtp_updated_at, :timestamp, {:null=>true, :precision=>nil})
-> 0.0002s
-- add_column(:groups, :smtp_updated_by_id, :integer, {:null=>true})
-> 0.0002s
-- add_column(:groups, :imap_enabled, :boolean, {:default=>false})
-> 0.0005s
-- add_column(:groups, :imap_updated_at, :timestamp, {:null=>true, :precision=>nil})
-> 0.0002s
-- add_column(:groups, :imap_updated_by_id, :integer, {:null=>true})
-> 0.0002s
== 20210517061815 AddDedicatedEnableImapSmtpColumnsForGroup: migrated (0.0028s)
== 20210517073211 AddStalledWikiCustomFieldsIndex: migrating ==================
-- add_index(:post_custom_fields, :post_id, {:unique=>true, :name=>"index_post_custom_fields_on_stalled_wiki_triggered_at", :where=>"name = 'stalled_wiki_triggered_at'"})
-> 0.0050s
== 20210517073211 AddStalledWikiCustomFieldsIndex: migrated (0.0054s) =========
== 20210525112226 RemoveLengthConstrainFromTopicLinkUrl: migrating ============
-- change_column(:topic_links, :url, :string, {:null=>false})
-> 0.0009s
== 20210525112226 RemoveLengthConstrainFromTopicLinkUrl: migrated (0.0013s) ===
== 20210526053611 AddErrorCountToPushSubscriptions: migrating =================
-- add_column(:push_subscriptions, :error_count, :integer, {:null=>false, :default=>0})
-> 0.0006s
-- add_column(:push_subscriptions, :first_error_at, :timestamp, {:precision=>nil})
-> 0.0002s
== 20210526053611 AddErrorCountToPushSubscriptions: migrated (0.0012s) ========
== 20210527114834 SetTaggingEnabled: migrating ================================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('tagging_enabled', 5, 'f', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0002s
== 20210527114834 SetTaggingEnabled: migrated (0.0013s) =======================
== 20210527131318 CreateDirectoryColumns: migrating ===========================
-- create_table(:directory_columns)
-> 0.0064s
-- add_index(:directory_columns, [:enabled, :position, :user_field_id], {:name=>"directory_column_index"})
-> 0.0023s
== 20210527131318 CreateDirectoryColumns: migrated (0.0098s) ==================
== 20210528003603 FixBadgeImageAvatarUploadSecurityAndAcls: migrating =========
== 20210528003603 FixBadgeImageAvatarUploadSecurityAndAcls: migrated (0.0010s)
== 20210528144647 MigrateWatchedWordsFromReplaceToLink: migrating =============
-- execute("UPDATE watched_words\nSET action = 8\nWHERE action = 5 AND replacement ILIKE 'http%'\n")
-> 0.0005s
== 20210528144647 MigrateWatchedWordsFromReplaceToLink: migrated (0.0008s) ====
== 20210528203310 PostMigrateGiftFromPmToPms: migrating =======================
== 20210528203310 PostMigrateGiftFromPmToPms: migrated (0.0007s) ==============
== 20210530122323 MoveTriggersToFields: migrating =============================
-- add_column(:discourse_automation_automations, :trigger, :string, {:null=>true})
-> 0.0004s
-- add_column(:discourse_automation_fields, :target, :string, {:null=>true})
-> 0.0004s
== 20210530122323 MoveTriggersToFields: migrated (0.0014s) ====================
== 20210530122334 MoveExistingTriggersToFields: migrating =====================
-- execute("DROP TABLE IF EXISTS discourse_automation_triggers;\n")
-> 0.0007s
== 20210530122334 MoveExistingTriggersToFields: migrated (0.0014s) ============
== 20210601002145 RenameTrustLevelTranslations: migrating =====================
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.newuser'\nWHERE translation_key = 'trust_levels.newuser.title'\n")
-> 0.0003s
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.basic'\nWHERE translation_key = 'trust_levels.basic.title'\n")
-> 0.0002s
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.member'\nWHERE translation_key = 'trust_levels.member.title'\n")
-> 0.0002s
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.regular'\nWHERE translation_key = 'trust_levels.regular.title'\n")
-> 0.0001s
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.leader'\nWHERE translation_key = 'trust_levels.leader.title'\n")
-> 0.0001s
== 20210601002145 RenameTrustLevelTranslations: migrated (0.0015s) ============
== 20210603135629 ConvertDateComponentToDateTime: migrating ===================
== 20210603135629 ConvertDateComponentToDateTime: migrated (0.0006s) ==========
== 20210614232334 AddSmtpGroupIdToEmailLog: migrating =========================
-- add_column(:email_logs, :smtp_group_id, :integer, {:null=>true, :index=>true})
-> 0.0006s
== 20210614232334 AddSmtpGroupIdToEmailLog: migrated (0.0010s) ================
== 20210617183010 AddAutomaticColumnDirectoryColumns: migrating ===============
== 20210617183010 AddAutomaticColumnDirectoryColumns: migrated (0.0016s) ======
== 20210617202227 ChangeAutomaticOnDirectoryColumnsToBool: migrating ==========
-- remove_column(:directory_columns, :automatic)
-> 0.0004s
-- add_column(:directory_columns, :automatic, :boolean, {:default=>true, :null=>false})
-> 0.0005s
-- execute("UPDATE directory_columns SET automatic = (user_field_id IS NULL);\n")
-> 0.0003s
== 20210617202227 ChangeAutomaticOnDirectoryColumnsToBool: migrated (0.0023s) =
== 20210618135229 ReintroduceTypeToDirectoryColumns: migrating ================
-- add_column(:directory_columns, :type, :integer, {:default=>0, :null=>false})
-> 0.0006s
== 20210618135229 ReintroduceTypeToDirectoryColumns: migrated (0.0024s) =======
== 20210621002201 AddColumnsToEmailLogToMatchIncomingForSmtpImap: migrating ===
-- add_column(:email_logs, :cc_addresses, :text, {:null=>true})
-> 0.0003s
-- add_column(:email_logs, :cc_user_ids, :integer, {:array=>true, :null=>true})
-> 0.0002s
-- add_column(:email_logs, :raw, :text, {:null=>true})
-> 0.0002s
-- add_column(:email_logs, :topic_id, :integer, {:null=>true})
-> 0.0003s
-- add_index(:email_logs, :topic_id, {:where=>"topic_id IS NOT NULL", :name=>"index_email_logs_on_topic_id"})
-> 0.0052s
== 20210621002201 AddColumnsToEmailLogToMatchIncomingForSmtpImap: migrated (0.0071s)
== 20210621103509 AddBanneredUntil: migrating =================================
-- add_column(:topics, :bannered_until, :timestamp, {:null=>true, :precision=>nil})
-> 0.0005s
-- add_index(:topics, :bannered_until, {:where=>"bannered_until IS NOT NULL", :name=>"index_topics_on_bannered_until"})
-> 0.0066s
== 20210621103509 AddBanneredUntil: migrated (0.0078s) ========================
== 20210621190335 MigratePendingUsersReminderDelaySetting: migrating ==========
== 20210621190335 MigratePendingUsersReminderDelaySetting: migrated (0.0010s) =
== 20210621234939 BackfillEmailLogTopicId: migrating ==========================
== 20210621234939 BackfillEmailLogTopicId: migrated (0.0015s) =================
== 20210624023831 RemoveHighestSeenPostNumberFromTopicUsers: migrating ========
== 20210624023831 RemoveHighestSeenPostNumberFromTopicUsers: migrated (0.0020s)
== 20210624080131 AddPartialIndexPinnedUntil: migrating =======================
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS \"index_topics_on_pinned_until\"\nON \"topics\" (\"pinned_until\")\nWHERE pinned_until IS NOT NULL\n")
-> 0.0038s
== 20210624080131 AddPartialIndexPinnedUntil: migrated (0.0044s) ==============
== 20210625203049 AddFlairGroupIdToUsers: migrating ===========================
-- add_column(:users, :flair_group_id, :integer, {:null=>true})
-> 0.0004s
== 20210625203049 AddFlairGroupIdToUsers: migrated (0.0009s) ==================
== 20210628035905 DropDurationColumnFromTopicTimers: migrating ================
== 20210628035905 DropDurationColumnFromTopicTimers: migrated (0.0013s) =======
== 20210701233509 DeleteOldReminderTopicTimers: migrating =====================
== 20210701233509 DeleteOldReminderTopicTimers: migrated (0.0005s) ============
== 20210702084757 ForceValueForEveryFields: migrating =========================
== 20210702084757 ForceValueForEveryFields: migrated (0.0126s) ================
== 20210702204007 AddDefaultAutoCloseSecondsToCategory: migrating =============
-- add_column(:categories, :default_slow_mode_seconds, :integer)
-> 0.0007s
== 20210702204007 AddDefaultAutoCloseSecondsToCategory: migrated (0.0011s) ====
== 20210706091905 DropDisableJumpReplyColumnFromUserOptions: migrating ========
== 20210706091905 DropDisableJumpReplyColumnFromUserOptions: migrated (0.0015s)
== 20210706214013 RenameTopicChatsToChatChannels: migrating ===================
-- rename_table(:topic_chats, :chat_channels)
-> 0.0042s
-- rename_column(:chat_channels, :topic_id, :chatable_id)
-> 0.0016s
-- change_column(:chat_channels, :chatable_id, :integer, {:unique=>false})
-> 0.0006s
-- add_column(:chat_channels, :chatable_type, :string)
-> 0.0031s
-- change_column_null(:chat_channels, :chatable_type, false, nil)
-> 0.0003s
-- add_index(:chat_channels, [:chatable_id, :chatable_type], {:name=>"index_chat_channels_on_chatable_id_and_chatable_type"})
-> 0.0028s
-- rename_table(:topic_chat_messages, :chat_messages)
-> 0.0037s
-- rename_column(:chat_messages, :topic_id, :chat_channel_id)
-> 0.0019s
-- change_column_null(:chat_messages, :post_id, true, nil)
-> 0.0004s
== 20210706214013 RenameTopicChatsToChatChannels: migrated (0.0198s) ==========
== 20210708035525 AddUserIdIndexToPostRevisions: migrating ====================
-- add_index(:post_revisions, :user_id, {:name=>"index_post_revisions_on_user_id"})
-> 0.0031s
== 20210708035525 AddUserIdIndexToPostRevisions: migrated (0.0036s) ===========
== 20210708035538 AddPostEditsCountToUserStats: migrating =====================
-- add_column(:user_stats, :post_edits_count, :integer)
-> 0.0004s
== 20210708035538 AddPostEditsCountToUserStats: migrated (0.0028s) ============
== 20210709042135 CreateExternalUploadStubs: migrating ========================
-- create_table(:external_upload_stubs)
-> 0.0114s
-- add_index(:external_upload_stubs, [:key], {:unique=>true, :name=>"index_external_upload_stubs_on_key"})
-> 0.0026s
== 20210709042135 CreateExternalUploadStubs: migrated (0.0146s) ===============
== 20210709053030 DropUploadsVerified: migrating ==============================
== 20210709053030 DropUploadsVerified: migrated (0.0017s) =====================
== 20210713092503 SetUsersFlairGroupId: migrating =============================
-- execute("UPDATE users\nSET flair_group_id = primary_group_id\nFROM groups\nWHERE users.primary_group_id = groups.id AND\n users.flair_group_id IS NULL AND\n (groups.flair_icon IS NOT NULL OR groups.flair_upload_id IS NOT NULL)\n")
-> 0.0008s
== 20210713092503 SetUsersFlairGroupId: migrated (0.0012s) ====================
== 20210720221817 AddDraftCountToUserStat: migrating ==========================
-- add_column(:user_stats, :draft_count, :integer, {:default=>0, :null=>false})
-> 0.0007s
-- execute("UPDATE user_stats\nSET draft_count = new_user_stats.draft_count\nFROM (SELECT user_stats.user_id, COUNT(drafts.id) draft_count\n FROM user_stats\n LEFT JOIN drafts ON user_stats.user_id = drafts.user_id\n GROUP BY user_stats.user_id) new_user_stats\nWHERE user_stats.user_id = new_user_stats.user_id\n AND user_stats.draft_count <> new_user_stats.draft_count\n")
-> 0.0008s
== 20210720221817 AddDraftCountToUserStat: migrated (0.0019s) =================
== 20210729134042 CreateChatMessageRevisions: migrating =======================
-- create_table(:chat_message_revisions)
-> 0.0068s
-- add_index(:chat_message_revisions, [:chat_message_id], {:name=>"index_chat_message_revisions_on_chat_message_id"})
-> 0.0041s
== 20210729134042 CreateChatMessageRevisions: migrated (0.0116s) ==============
== 20210730134847 CreateUserChatChannelLastRead: migrating ====================
-- create_table(:user_chat_channel_last_reads)
-> 0.0049s
-- add_index(:user_chat_channel_last_reads, [:chat_channel_id, :user_id], {:unique=>true, :name=>"user_chat_channel_reads_index"})
-> 0.0028s
== 20210730134847 CreateUserChatChannelLastRead: migrated (0.0084s) ===========
== 20210802131421 RemovePostProcessedTriggerOption: migrating =================
== 20210802131421 RemovePostProcessedTriggerOption: migrated (0.0007s) ========
== 20210805204149 MakesAutomationDisabledByDefault: migrating =================
-- change_column_default(:discourse_automation_automations, :enabled, false)
-> 0.0034s
== 20210805204149 MakesAutomationDisabledByDefault: migrated (0.0040s) ========
== 20210812033033 AddMultipartAndSizeColumnsToExternalUploadStubs: migrating ==
-- add_column(:external_upload_stubs, :multipart, :boolean, {:default=>false, :null=>false})
-> 0.0022s
-- add_column(:external_upload_stubs, :external_upload_identifier, :string, {:null=>true})
-> 0.0003s
-- add_column(:external_upload_stubs, :filesize, :bigint)
-> 0.0003s
-- add_index(:external_upload_stubs, :external_upload_identifier, {:name=>"index_external_upload_stubs_on_external_upload_identifier"})
-> 0.0047s
-- change_column_null(:external_upload_stubs, :filesize, false, nil)
-> 0.0019s
== 20210812033033 AddMultipartAndSizeColumnsToExternalUploadStubs: migrated (0.0108s)
== 20210812145801 CreateDirectMessageTables: migrating ========================
-- create_table(:direct_message_channels)
-> 0.0040s
-- create_table(:direct_message_users)
-> 0.0051s
-- add_index(:direct_message_users, [:direct_message_channel_id, :user_id], {:unique=>true, :name=>"direct_message_users_index"})
-> 0.0031s
== 20210812145801 CreateDirectMessageTables: migrated (0.0129s) ===============
== 20210813141741 AddTimestampsToChatChannels: migrating ======================
-- add_column(:chat_channels, :created_at, :timestamp)
-> 0.0013s
-- add_column(:chat_channels, :updated_at, :timestamp)
-> 0.0012s
-- change_column_null(:chat_channels, :created_at, false, nil)
-> 0.0002s
-- change_column_null(:chat_channels, :updated_at, false, nil)
-> 0.0002s
== 20210813141741 AddTimestampsToChatChannels: migrated (0.0051s) =============
== 20210819152920 ChangeAllowUploadedAvatars: migrating =======================
-- execute("UPDATE site_settings\nSET data_type = 7, value = (CASE WHEN value = 'f' THEN 'disabled' ELSE '0' END)\nWHERE name = 'allow_uploaded_avatars'\n")
-> 0.0003s
== 20210819152920 ChangeAllowUploadedAvatars: migrated (0.0006s) ==============
== 20210819202912 CreateIncomingChatWebhooks: migrating =======================
-- create_table(:incoming_chat_webhooks)
-> 0.0083s
-- add_index(:incoming_chat_webhooks, [:key, :chat_channel_id], {:name=>"index_incoming_chat_webhooks_on_key_and_chat_channel_id"})
-> 0.0028s
== 20210819202912 CreateIncomingChatWebhooks: migrated (0.0118s) ==============
== 20210823160357 CreateChatWebhookEvents: migrating ==========================
-- create_table(:chat_webhook_events)
-> 0.0057s
-- add_index(:chat_webhook_events, [:chat_message_id, :incoming_chat_webhook_id], {:unique=>true, :name=>"chat_webhook_events_index"})
-> 0.0026s
== 20210823160357 CreateChatWebhookEvents: migrated (0.0090s) =================
== 20210824203421 RemovePostTimingsSummaryIndex: migrating ====================
-- remove_index(:post_timings, {:column=>[:topic_id, :post_number], :name=>:post_timings_summary, :if_exists=>true})
-> 0.0056s
== 20210824203421 RemovePostTimingsSummaryIndex: migrated (0.0077s) ===========
== 20210901130308 CreateUserChatChannelMembership: migrating ==================
-- create_table(:user_chat_channel_memberships)
-> 0.0079s
-- add_index(:user_chat_channel_memberships, [:user_id, :chat_channel_id, :desktop_notification_level, :mobile_notification_level, :following], {:name=>"user_chat_channel_memberships_index"})
-> 0.0030s
-- add_index(:user_chat_channel_memberships, [:user_id, :chat_channel_id], {:unique=>true, :name=>"user_chat_channel_unique_memberships"})
-> 0.0026s
== 20210901130308 CreateUserChatChannelMembership: migrated (0.0155s) =========
== 20210909041448 MakeTopicIdNullableForBookmarks: migrating ==================
-- change_column_null(:bookmarks, :topic_id, true, nil)
-> 0.0003s
== 20210909041448 MakeTopicIdNullableForBookmarks: migrated (0.0076s) =========
== 20210913032326 AddForTopicToBookmarks: migrating ===========================
-- add_column(:bookmarks, :for_topic, :boolean, {:default=>false, :null=>false})
-> 0.0007s
-- add_index(:bookmarks, [:user_id, :post_id, :for_topic], {:unique=>true, :name=>"index_bookmarks_on_user_id_and_post_id_and_for_topic"})
-> 0.0042s
-- index_exists?(:bookmarks, [:user_id, :post_id])
-> 0.0058s
-- remove_index(:bookmarks, [:user_id, :post_id])
-> 0.0048s
== 20210913032326 AddForTopicToBookmarks: migrated (0.0188s) ==================
== 20210914011037 ChangeUploadsFilesizeToBigint: migrating ====================
-- change_column(:uploads, :filesize, :bigint)
-> 0.0289s
== 20210914011037 ChangeUploadsFilesizeToBigint: migrated (0.0296s) ===========
== 20210914152002 UpdateValueOnThemeSettingForUploadType: migrating ===========
-- execute("UPDATE theme_settings\nSET value = (SELECT id FROM uploads WHERE uploads.url = theme_settings.value)\nWHERE data_type = 6\n")
-> 0.0009s
== 20210914152002 UpdateValueOnThemeSettingForUploadType: migrated (0.0014s) ==
== 20210915142958 AddPendingPostsCountToUserStats: migrating ==================
-- add_column(:user_stats, :pending_posts_count, :integer, {:null=>false, :default=>0})
-> 0.0008s
== 20210915142958 AddPendingPostsCountToUserStats: migrated (0.0013s) =========
== 20210915215952 MarkReminderTypeAsReadonlyForBookmarks: migrating ===========
== 20210915215952 MarkReminderTypeAsReadonlyForBookmarks: migrated (0.0040s) ==
== 20210915222124 DropReminderTypeIndexForBookmarks: migrating ================
-- index_exists?(:bookmarks, [:reminder_type])
-> 0.0083s
-- remove_index(:bookmarks, [:reminder_type])
-> 0.0079s
== 20210915222124 DropReminderTypeIndexForBookmarks: migrated (0.0184s) =======
== 20210915222124 DropReminderTypeIndexForBookmarks: migrating ================
-- index_exists?(:bookmarks, [:reminder_type])
-> 0.0083s
-- remove_index(:bookmarks, [:reminder_type])
-> 0.0079s
== 20210915222124 DropReminderTypeIndexForBookmarks: migrated (0.0184s) =======
== 20210920044353 AddDefaultCalendarToUserOptions: migrating ==================
-- add_column(:user_options, :default_calendar, :integer, {:default=>0, :null=>false})
-> 0.0009s
-- add_index(:user_options, [:user_id, :default_calendar], {:name=>"index_user_options_on_user_id_and_default_calendar"})
-> 0.0034s
== 20210920044353 AddDefaultCalendarToUserOptions: migrated (0.0052s) =========
== 20210922064213 AlterBumpedAtIndexesOnTopics: migrating =====================
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS index_topics_on_bumped_at_public\nON topics (bumped_at)\nWHERE ((deleted_at IS NULL) AND ((archetype)::text <> 'private_message'::text));\n")
-> 0.0043s
-- execute("DROP INDEX IF EXISTS index_topics_on_bumped_at;\n")
-> 0.0041s
-- execute("DROP INDEX IF EXISTS index_forum_threads_on_bumped_at;\n")
-> 0.0002s
== 20210922064213 AlterBumpedAtIndexesOnTopics: migrated (0.0093s) ============
== 20210928161912 MigrateDeprecatedHtmlSettingType: migrating =================
-- execute("UPDATE site_settings\nSET data_type = 1\nWHERE data_type = 25\n")
-> 0.0002s
== 20210928161912 MigrateDeprecatedHtmlSettingType: migrated (0.0006s) ========
== 20210929215543 AddTokenHashToEmailToken: migrating =========================
-- add_column(:email_tokens, :token_hash, :string)
-> 0.0005s
-- execute("UPDATE email_tokens\nSET token_hash = data.token_hash\nFROM (VALUES (2, 'a22d030d9178c9fcbf94078d4757446909cf50ad81734856b1c7513508f04193'),(1, 'ad7977cb12df9c64427978890210db8bfb1138a932e6c7aa33cbc656a5905f26'),(3, '6eaed81c83bae1aa9f6144cd97269ea190b936d34feabdb6553ccb092bd97a8d'),(6, '5722b3981c6581e3df04dc3a5c008d94a610dd68974fd910bc3dd25ca7b69db8'),(33, '6bd0f928bbb464dac1b4a6a271079e55587db40ec814f8a1fff92562cc86af88'),(10, '764b34d1a967542218dce691e0be27453cabb95dfcfe357d3754e00ad3832250'),(8, 'ad1a7482b60b5aafa32f8df3924a8361d18df61e6fb24897af7696b3b40bdb3a'),(11, '76ee2b64ff94a61204fdaaf428fc7bcd64b11f5b452d2b5688efdbcebb377f35'),(9, '09aced77721c0b6527cda6434b00242f77dc0d4b77dec5540b6774504fd82861'),(34, 'da199be00355423e7af42bc8502cacc92cc4eba7ca3ce51a8b2af09c6ae59bc4'),(12, 'b95d2e1b18275f31df5361aa34b9677f5cd53265202c4991eb26f4be25b2418c'),(14, '221a39525baa5914dc188f9719f1d4a476c07d8e4c06a81a0216cdd6ed88983a'),(35, 'eea901e1523bdbb4ccfc4fa6f65885f188e0c0bcb929b4fdbf73e2242596a93d'),(15, '579e4e15f61570c571dff216262bd7fed3b7106ffedb7b10d7e8cc10192be60f'),(59, 'c25596295135c6149c3e546401bfb7fcaa550c5de6f603c1ca54f1281e4be5cd'),(17, 'f91b6658c2e7d1236a30c6aece7fe15ae7e663a7ac735a695826ea435d299405'),(18, '87bda21d5b1a99568a5f9ed0f3088cf4ff80efc6a8c5eca0cac5fd29e75556fb'),(21, '581f3b814c230dda03c8c3d7bf0c55e4c73f3e4d53885a0cb661a7a166d432ad'),(22, '8517bcde1f251dee0a5099d97e29d3204751fd6a30d0678806e60df2f2cd3cf8'),(23, '8b3fa97e25805373cbaff2cc4d43d094159f0a8fe7a7e7efd77113e092c7220b'),(24, 'de834aac361be5f84b78b7c38bf065d3cfed58204df2caba8c1027b946ded25b'),(20, '06e1b540b6986dc884d6e2350c10f27b605fa2f18fd3de575b72c01d0aabaf7f'),(26, '4b3177e5b277a9d92f58aa602533faefec3a85097ffca3e44ec294a5e73cfc50'),(27, '204ac3ea3ec0cde9be09c51d5366a83e5b223dfeac3b164a55b602a91ce7a3d0'),(28, 'ed8e9ab0c717c56c01e0196ee11bb5905ea6378b16579c94004c5327127aeb31'),(29, '6b0c736cc7a556e7c5e7435e6745aa432a61133d1fdb92918b42917741615c3e'),(25, '0195f9a7810bbadf5b43905311a5a038e846bd69b688a376a26e296298ec2a04'),(30, '7e9c22c6ac82dc8e0e06c42424fdfde2d1c20df9200ec65a0b31f1fc0008cff9'),(63, '89a9fff17433719aaf71480b93ab8c325ce6fe81f98d38f005f2bfe70902804b'),(32, '248ac01719ed36b01405175c75f2929077f88364693510ef9a81c092d9bcfd9c'),(36, '3aace3cb54fbe05a711d8ba2fc70306627e1af6efed24109875b9fc3a39aa583'),(37, 'b20cdc14d0436d4a03e7c51e04a2b9021dbebe9991cc84e212ca617db62579c6'),(38, 'cf4620fe80f1d9a8bb980d1f3908c237d549b623e16b0b2762410e6913ea933e'),(39, '90ee5fb112f40ae534b638419a57e4b7c375e4e9eb7e08be042aa7948323ed1b'),(40, '0f4e9b78703aec5a466e33829125758218b6399c96450fbd9d98f54223e4a350'),(41, 'ea331ced23c2a12cf0490cbd377a13350d92d5fb7afbdca04b1d70859dac6897'),(42, 'c046f5d2b6f4da24a6ce46a0a20b1990a9f74ec8920f077f30b4444b24584bb7'),(43, '704217a89a688fbc108d853ef887006c49847827e5f006227432f26b0a9aa212'),(44, 'e21ae17e36c86712182f29af1b432f7c91eb9db2b1876ee4c0885fa6fe252f47'),(45, '41e3aa9b0fb2276592bb18f1c6c41b413c5942abc08bf198eddf40cb475ea711'),(46, '6adb293583f6f7431d62ff2f3c2cb265f826fb53c971034a8d32df8dbc85ee57'),(47, '5a9234dad2d2fb897c93f56aa45a60c321c569a298a6df4538793c0f5d808a9b'),(48, 'd26a6259c549ab6b056623d14470da64bfe82e0f7cd425a014574fe2d12cbe4d'),(49, 'b8af1e9588555087d756234761a0d4ea61e53aa279f5432f4f8044ecb44a9d9c'),(53, '59171756fc78053c03ab44cbe510e79629ce919defd2a24dd32b62d0a8127fdc'),(54, '6e359ba460947cf85b921d0685fc33c3b57cdc02359baaba0e3e188c257b11bf'),(55, '223043b20d8b29d38859c54a5383ede7d6873f5fedbda7d33e73f58f78bed235'),(56, '4b19fc7632c184a48a3b7f7451bf123ac308a4275b291a878d48fa23902b7db6'),(57, 'ffc5b5fe63c53687c49ad32a212e3aeca40c0b0c237a5475a6a76b9fbada556e'),(58, 'f21219f41e5a581b56aeb49177fec3cef2f44117c5392830db59a03eb5e7f410'),(31, 'f113aaa4387678d592ccccb59943dcebec9eaa7ec8c50158daf98ea3835ed1a7'),(60, '94fcd6f7361ecfe280b1cd732771d718fd916d5e84362475b6638eab40567f91'),(61, '151e5ebe42ce80742ade7690f99dc11edaf91303e682ad3f8f1e48fd98151434'),(62, '76b87f2c75112befebad936fa8fcd254e3cb076031dc572a8b22826c2224fedc'),(64, 'a3da753eececb8211f07325c2248850ce492947520cb37fc6a0b29dce57f4f48'),(65, 'ceb80efaf0385a97d07941e5fcda5b715283e42bf9154dad2fe0a98290625a43'),(66, '58ff4259869f79f0d48d1e4391d6c163e30f12b6a797f350732b0e39779710bc'),(67, '90af35483a1b27be25e172280de3d1f1b9307a70f6c7c52895a820ce46c1cb37'),(68, 'f940a2ec0321a8536a7614b89c0f0138bda3c9ebc63501b0aa14079f3fa48122'),(69, '82a5119cfe44d5878a41881a0087cac3a6222b64252c0696b2ab84a157b020f8'),(70, '6ce81b81c1190dcf53689cd563e76d118645a745ff3a8da48319388c2be93b80'),(71, 'a691b9df45cc7ec50d5b2f95168f085ab29cbd281c4f2565c7cd5fe2883dc111'),(72, '937a97677a4f4900c004b9fbc62dd39086542c1372279c764d00747d6c77546e'),(73, '71649a7702ac31a1cda970e7ed22d10d78a0c0bdcc14a1f58f8aa0c7e9dd74b0'),(74, '82a4d83afd535340e9b7ee678b4d1fd55d7d580ec0a59ac445119a7e4fcadb34'),(75, '6e7009bd3de5190c267c8b8b4b26a879648ca0a766fc551bcc9a56fc43af6cbf'),(77, '449f380c8c9206a07b94cde0cb375095aecd72b9626032b3ccde2856376c283d'),(78, '8ca155293a4266f832e32be07696f91f9f73a861050270b627650f795e12ca4a'),(79, '00a97ae5cd0102c9198c8d80364f8841bf94922d298ccfc0ce4086e0e765c822'),(80, '1d16396a903ba1f5673d5f7c1b1a95d1988d4cf2b387048ad935eedd0cdef677'),(13, 'cd2e474b3fb0f20ab7db4f8805cecb48d3914929b69cd2133e1232f410028503'),(81, '5b5553a3df38a35a66f8b243e80f9010c7c5d98710c5040ff07afe26ffb5022d'),(76, '3eceb08fde42a61501eec2965d582f4ceed3abb6205d3d72761717340855e0d2'),(82, '0926872043cb02910d78bd9dbe930543146838527839722604a5cd10b04d7d85'),(84, '71320e61db73068f1bd6908ecbf84c073c758f262b74c8020ed3cfb04209b759'),(85, 'dfcb4fb8f1a9aace0cd3baae57e0cb13278d28d843db60cb31c63388e3b3bc4e'),(86, '5609e939561c4d879541b83b2b4adfce6645a774970044cb8cfdc9eb957236bb'),(87, '58a08e6beedba45b008ada2b14e40840252e3337283576beec2975c7a188a6f8'),(88, '6799c474a2e34dac14666a021af28b1822355cf7c002a5dad1d44c5836ed027b'),(90, '1da146b2a46d8c624d16319e1e1a9c53ab80df0d9fb535ea9f255a96e2fcc7cf'),(92, '6abf15ccb4fee791f14c4b2bb9bbebbabbee25e4d618c4030afc5c81c0c950be'),(93, 'c428770a0f6d2b3f441c85c86799236fb688847cc833c6b8ba7a2c992b8e21bc'),(94, '70b380f340ee72d6102640021c0a15e1b1ecab7616dae0176056f4d7eef4a224'),(95, 'ca525183dd72ddbf46312b79bb4c6b1c0e86366abbd69952381ddea9a99f38b6'),(96, '23a9afda09e4cba2189485083fa990fe62ffb5cd9a66ef435f81eea491a1f9d2'),(97, '4944a995405acc45619b16ef32657ee0cefee89a62cf9bd7796f08acffd992df'),(98, 'c4a6c537f25050b3bc10868f66d32323d900aaef85d378c2aed8e821b99328ac'),(83, '9560d86e7d0516a8072f6ec8b51ce2a57983206d52cdae765735a83b4a329293'),(99, '79bcece8c431b6e2c8e63a64fac55935bb126d01275c2dca4fc416c14a8521e0'),(91, '0bed9a76631d745baa74ec50be962a9990c5f22fad490faff2bbd3aac262493f'),(109, 'e04f983786a1443981bbf7ee19458001d106a2a06f483d8165caf8345b6b5d2d'),(104, '30f68257670f80c9a2eb6acb0652e410e5b3710c26579aa70fb85b32acdb024b'),(106, 'aa4f6d51668d247746743d2b13557280f5cc8a45284f911b1021819f74d56f2a'),(110, '4a0246b5bf545539f031fe735121723e89d3807edca1de6ffe99fe759d1cecb8'),(108, 'eacc4fed47609e82641386a47672abe4d4521eff1090893806821a50cc2738a0'),(103, '348fef02eb9c8f155d90d72d008121df3dcc460151ad44540345b74da9ce6228'),(111, '1da79f34aed3ba3d0c93a467ba82929fce457cc5278c8dae5d94fefba0c08382'),(102, '9a4547458d8275e8ea51bb32c7788009265b744ab1515433e12fe29995755ecd'),(101, 'd680fb1d293d58eeb88b7b4464e6c8e22061305bd614de3b0ab5b9507f8011a5'),(100, '6460901bb05b9e0412b1dd526afc64928f723aba3ae56d60a95ead7e957b3bc0'),(112, '8e6eee7504b6cce01da9d7954efcf154398d1cbf57fc99d6b362d581f9907bbb'),(107, '31015b4c4d994b93f1c9906fbb285ca406e683643080dd37de076b2331d7079d'),(121, 'fe6a8d8479dd0f88ed1b41f32b06004d84bcdb5c56834b302a48a758ce72edf6'),(116, '75acb02a4efa0624163f5d6ede84ba031fda529e148d4f6658ecc3e9039d4635'),(117, '5cdc34087d7131491a49d97f23773b57f1918cd8f9e829e5cddf4cfd4d3ac258'),(118, '3d8864f56785e38dded5b5a20074202c3aa9257a026a364502cfb2dcd5632738'),(119, 'f6b81f7d2599cceadc00ee56a5fc6a8ac80e5e04127058778f9aaea89aad5e92'),(105, 'f5c791ec3f4377801bdf89ac08893724fcfe65c7c71a3ce244900fe5dadc6808'),(52, '155aba94d9dbac15e73db0f9c4d3f81e23da2f0bbeed2b509cf3c05ed55f0994'),(50, '316c7efc23ef6f99bb32eb60862d4ed3e03c37fcd95d779dcd99a863fb05ebaa'),(123, '8e43cec3db60b9682c60912c29c76092eaca220886e82d04fa70a27d3986f480'),(124, 'f98f94f63a1dfadd925d30eac417931c0f55e71279f85feab78a83fcb346da69'),(125, 'ce428bb692485e7b9fcfca752ec6badc3a335b0c0081a081dc159fb960cc5763'),(126, '748700682ad6f8082c0680a7f493d45e4f7a00ac79459eaa77297d1cc4aff389'),(127, '6806c9b3c19f20c4b2b57cffeedf2067379362e52702dcf6a9acd25115c99920'),(128, '1db3fbdf7511396f3aa42bb3296672b972c7afbae32ee3f687f6009bda0a2b4f'),(129, '23a0d6745d4f424e0b4115274b6b63c62160974de97cfe0dfb934a89c1cf825c'),(89, '3b001662fd11a7347e5c73a3c03af906cacb88080d3b9f5e4384945907904106'),(130, '8976c4c7c1a0bdc4c1419901dad42c8b8a32feed516154f49c9690306330e833'),(131, 'ff6970a5d1fb2aa9527a8960e42449646b112085dae4c260d33d903f0ca149b0'),(132, '88b2b7bc2119cde16ef3131648500b5875288121451c6a0ae5664ee201f0a0bf'),(133, '3278efb3229b29d9f8e914f97e6ec9bfcc0ae354ed74d170ebf8648329671331'),(136, '413c13f03a57d36628b8a1ceed93e5692bf193bd4244239e317bf1e6ab8cc613'),(137, '40160fe3ae7c681544254b7414b5d02b783c290ffc52b75399c7066c291dd03a'),(138, '390234295ddab6bc68a32dac38a14e8e5179b99b21c2931df7ecd070c82aff40'),(139, '0aa3c06247836728361a1de615d79bd8df2341eba2cddc531d065df7169e4604'),(142, 'd01a286ef439dd815ff3bf19e081be59c3db4cde32e9d7a92ed3842f59111d02'),(143, 'ab1ddc594a9fb66a4345d8d039e6c3b16f6fc15510fc206ef3e3e8673c97c4eb'),(145, 'b0b5d5eacfc5308bd214f03b1b10178e222331506564d045381425891bacb388'),(141, '8c5513d34813c02ebcb34cf60956f314998b6100ad32f32da52765480aaa4317'),(146, '9c376c383a30bf35ea371b6c367f6bb1ee6d73ae92f114d2f1d6f4730cab7d68'),(147, '032fd420bf48faf1bdf9f08d56f04226bb6c2fb5563a4739c2f234a57464e36d'),(148, '5f24bfa1a52193feb6f63a5ef9161dcb14683683899f19be96df2681fb22cd62'),(149, '189d3b4ce7822946ec88a069603b1993f3b5cbe34d6917ec88dd5cf41184ab79'),(152, 'c278d3a98a66a929777d27d5e980861035f883854d223927d37fae7ad7c0336a'),(153, '784ffdf3b94edfee51985f9fbb7922040976e44a22731aa477c93696cb939a27'),(154, 'b5e3c96b53277da76391d2bdee376ffd7b92f234a2901875439db713bec86122'),(155, '62c0264da81d0939ca0bde592620a9b90cd80fc2274ef29e5c28f64d63d8d9c3'),(156, '5f3a90d90984a8db0a44d7100561e904859e2c84baea07340d8a93edfb0f26e4'),(157, 'e8bafe2a878e1163936d9a54087acf0bce1d87a5484dfb260e12917b075c43cc'),(158, 'c33a7e14c31ad1771b457080bfcf5ca21509cc35e78f0f2898bae9254c2f1029'),(159, '891dbaf788128feaf64d11d9b5c40de9b0c5f05a460da04693c6211b114bc7eb'),(160, 'fb946b252e27b80c76e9da4e792725ff67381de65820ea68f01a9a04471d33b4'),(161, '39a26b54517eee25565607b1f0945e56a615312805af28c62e03d74214bf76ac'),(162, '17caf71971ee62c04cfac608fa9b0087f401e85b4f466b6f7d658802c8c80d0b'),(163, 'cb06301ed12a4442edb550b4ef336fe728bdb6593b868869574ac1e8666f422f'),(164, '191d367f22e229fb68817fad904db7651f370bccdfc175785a65f6daed90a219'),(165, '0822a14e730a3482d09af17cdea3d08a32cf24171f9ef4ffa23cfe5d6b7f9058'),(166, '5a1aab5123279f45db68e18c868483feb7b76b30d17af1b2680c4d88df7bd19f'),(167, '68399e3324c3510a4a6ac00d14a8e4b216094820fd9db9aa3a5c9f706dbf3ca3'),(174, 'ececd057cb4779cef52823083ec9c82961f3e8539190309aaf6bcf2e3a8bafb5'),(176, 'bc2c79132216e7d1a42d6a9792acf5273019bbc5f278fc3805c1356a1f02c1be'),(175, 'b400cbf0a846207e836229eca5667a963fbf690cce6db1f7c5eb1d8a77748c52'),(180, '9b4aba0ea051d5b0c122f5537c9c4094a90200d64927fb35e8f8b3ceb196a292'),(177, '3fed26fe66f5998ba29b91492cc7c14d786c6e93c9140b7a197c77fe1491d7ef'),(181, 'f8da30602603aac15013c16a7546c664a56c18b688d9ceb91f36cf73fb4e64fc'),(182, 'ad716eb41bbd9c20ccc843ce36d4556e180e65c615265d94bd601b9d3a00a9af'),(19, '374cc731fe422a43fc19262c6b52073139fcb32458e5151cd72ce7bf3b6e8e14'),(183, 'bc983f1b189100539bc9902a724f36690c7a0fde2e475acf36ca51caa768ab15'),(185, 'c92b5cb90377b0be5814df22b255860d7d6dd72e35bbde17410fbb4024836ec2'),(184, 'f0d266a770ca3af521e9a265de4f68ce9f23e93264967d82dee3e5667e9897cb'),(186, '110764f28095409fa7cc60d3fedaa648bc022b965d5170710c0c8393074a0195'),(187, '9a1414da05503812b30dd892c9d60b1d6afced61557450db206cd02316917ba1'),(188, '1bb14f4d8a5b64de886e7b78a3a3da304ae58901464ab586722dd5f84883206d'),(114, '52da7e00af315c442deb72a64749dfd96d8992bb148c5ea02ae3390d14e48270'),(115, 'd88c5bd0d4bbc624757a97b428b9f0004aacb9357c88b9b2a2079bdb90d207a3'),(189, '6b06da56ee416217ec12cb1b35a866a3610abaec3c6b23ad816357157bbcf650'),(190, '9b4a938e3710df3ad63ffce079464156d017254868344a09572a9a573f6c3e29'),(191, '0ee17ec8d7cf979b35b707b7cce870a3c56ff326368f17dfb31019bdcb9d10d7'),(192, 'e66fede9824574d4377015fe5a7c532ef40eb6dc31873a709891b8b9a39c45d1'),(193, '9ef2bc040e794fbafbc333406144064206254f5c62074f2c8882c29e57a789ee'),(194, '061e60ddf7b8c0af5672644ef84bb0011b8ab9510b9ef1b88546a07b9a14bad4')) AS data(id, token_hash)\nWHERE email_tokens.id = data.id\n")
-> 0.0025s
-- change_column_null(:email_tokens, :token_hash, false, nil)
-> 0.0003s
== 20210929215543 AddTokenHashToEmailToken: migrated (0.0055s) ================
== 20210930144333 AddChatEnabledToUserOptions: migrating ======================
-- add_column(:user_options, :chat_enabled, :boolean, {:default=>true, :null=>false})
-> 0.0007s
== 20210930144333 AddChatEnabledToUserOptions: migrated (0.0011s) =============
== 20211005163152 AddScopeToEmailToken: migrating =============================
-- add_column(:email_tokens, :scope, :integer)
-> 0.0004s
== 20211005163152 AddScopeToEmailToken: migrated (0.0014s) ====================
== 20211013092406 AddNormalizedEmailToUserEmail: migrating ====================
-- add_column(:user_emails, :normalized_email, :string)
-> 0.0003s
-- execute("CREATE INDEX index_user_emails_on_normalized_email ON user_emails (LOWER(normalized_email))")
-> 0.0035s
== 20211013092406 AddNormalizedEmailToUserEmail: migrated (0.0043s) ===========
== 20211015092047 AddsAutomationIdsIndexToPostCustomFields: migrating =========
-- add_index(:post_custom_fields, [:post_id, :value], {:unique=>true, :where=>"name = 'discourse_automation_ids'", :name=>:idx_post_custom_fields_discourse_automation_unique_id_partial})
-> 0.0046s
== 20211015092047 AddsAutomationIdsIndexToPostCustomFields: migrated (0.0050s)
== 20211015092048 MakeDiscourseAutomationIdAnArrayOnTopicCustomFields: migrating
-- add_index(:topic_custom_fields, [:topic_id, :value], {:unique=>true, :where=>"name = 'discourse_automation_ids'", :name=>:idx_topic_custom_fields_discourse_automation_unique_id_partial})
-> 0.0044s
== 20211015092048 MakeDiscourseAutomationIdAnArrayOnTopicCustomFields: migrated (0.0058s)
== 20211015092049 AddsAutomationIdsIndexToUserCustomFields: migrating =========
-- add_index(:user_custom_fields, [:user_id, :value], {:unique=>true, :where=>"name = 'discourse_automation_ids'", :name=>:idx_user_custom_fields_discourse_automation_unique_id_partial})
-> 0.0043s
== 20211015092049 AddsAutomationIdsIndexToUserCustomFields: migrated (0.0047s)
== 20211018234219 RemoveEnableExperimentalImageUploaderSiteSetting: migrating =
-- execute("DELETE FROM site_settings\nWHERE name = 'enable_experimental_image_uploader'\n")
-> 0.0002s
== 20211018234219 RemoveEnableExperimentalImageUploaderSiteSetting: migrated (0.0006s)
== 20211019092048 RemoveCrawlImagesSiteSetting: migrating =====================
-- execute("DELETE\nFROM site_settings\nWHERE name = 'crawl_images';\n")
-> 0.0002s
== 20211019092048 RemoveCrawlImagesSiteSetting: migrated (0.0005s) ============
== 20211019152356 PopulatePendingPostsCountColumn: migrating ==================
-- execute("WITH to_update AS (\n SELECT COUNT(id) AS posts, created_by_id\n FROM reviewables\n WHERE type = 'ReviewableQueuedPost'\n AND status = 0\n GROUP BY created_by_id\n)\nUPDATE user_stats\nSET pending_posts_count = to_update.posts\nFROM to_update\nWHERE to_update.created_by_id = user_stats.user_id\n")
-> 0.0006s
== 20211019152356 PopulatePendingPostsCountColumn: migrated (0.0025s) =========
== 20211022151713 CreateChatMessagePostConnections: migrating =================
-- create_table(:chat_message_post_connections)
-> 0.0040s
-- add_index(:chat_message_post_connections, [:post_id, :chat_message_id], {:unique=>true, :name=>"chat_message_post_connections_index"})
-> 0.0027s
== 20211022151713 CreateChatMessagePostConnections: migrated (0.0072s) ========
== 20211029145508 AddChatIsolatedToUserOptions: migrating =====================
-- add_column(:user_options, :chat_isolated, :boolean, {:null=>true})
-> 0.0004s
== 20211029145508 AddChatIsolatedToUserOptions: migrated (0.0008s) ============
== 20211104141254 AddOnlyChatPushNotificationsToUserOptions: migrating ========
-- add_column(:user_options, :only_chat_push_notifications, :boolean, {:null=>true})
-> 0.0003s
== 20211104141254 AddOnlyChatPushNotificationsToUserOptions: migrated (0.0007s)
== 20211106085344 CreateAssociatedGroups: migrating ===========================
-- create_table(:associated_groups)
-> 0.0067s
-- add_index(:associated_groups, [:provider_name, :provider_id], {:unique=>true, :name=>"associated_groups_provider_id"})
-> 0.0026s
== 20211106085344 CreateAssociatedGroups: migrated (0.0098s) ==================
== 20211106085527 CreateUserAssociatedGroups: migrating =======================
-- create_table(:user_associated_groups)
-> 0.0090s
-- add_index(:user_associated_groups, [:user_id, :associated_group_id], {:unique=>true, :name=>"index_user_associated_groups"})
-> 0.0026s
== 20211106085527 CreateUserAssociatedGroups: migrated (0.0127s) ==============
== 20211106085605 CreateGroupAssociatedGroups: migrating ======================
-- create_table(:group_associated_groups)
-> 0.0088s
-- add_index(:group_associated_groups, [:group_id, :associated_group_id], {:unique=>true, :name=>"index_group_associated_groups"})
-> 0.0027s
== 20211106085605 CreateGroupAssociatedGroups: migrated (0.0121s) =============
== 20211116225901 AddDescriptionToTags: migrating =============================
-- add_column(:tags, :description, :string)
-> 0.0004s
== 20211116225901 AddDescriptionToTags: migrated (0.0008s) ====================
== 20211119103353 AddsDiscourseAutomationUserGlobalNotice: migrating ==========
-- create_table(:discourse_automation_user_global_notices)
-> 0.0072s
-- add_index(:discourse_automation_user_global_notices, [:user_id, :identifier], {:unique=>true, :name=>:idx_discourse_automation_user_global_notices})
-> 0.0030s
== 20211119103353 AddsDiscourseAutomationUserGlobalNotice: migrated (0.0108s) =
== 20211119142000 AddCookedToChatMessages: migrating ==========================
-- add_column(:chat_messages, :cooked, :text)
-> 0.0004s
-- add_column(:chat_messages, :cooked_version, :integer)
-> 0.0003s
== 20211119142000 AddCookedToChatMessages: migrated (0.0011s) =================
== 20211123033311 ResetFirstUnreadPmAtOnUserStat: migrating ===================
-- execute("UPDATE user_stats us\nSET first_unread_pm_at = u.created_at\nFROM users u\nWHERE u.id = us.user_id\n")
-> 0.0011s
== 20211123033311 ResetFirstUnreadPmAtOnUserStat: migrated (0.0015s) ==========
== 20211123144714 AddRecentSearches: migrating ================================
-- add_column(:user_options, :oldest_search_log_date, :timestamp, {:precision=>nil})
-> 0.0008s
-- add_index(:search_logs, [:user_id, :created_at], {:where=>"user_id IS NOT NULL", :name=>"index_search_logs_on_user_id_and_created_at"})
-> 0.0047s
== 20211123144714 AddRecentSearches: migrated (0.0060s) =======================
== 20211124161346 QueueInternalOneboxRebake: migrating ========================
== 20211124161346 QueueInternalOneboxRebake: migrated (0.0004s) ===============
== 20211129171229 CreateChatUploads: migrating ================================
-- create_table(:chat_uploads)
-> 0.0037s
-- add_index(:chat_uploads, [:chat_message_id, :upload_id], {:unique=>true, :name=>"index_chat_uploads_on_chat_message_id_and_upload_id"})
-> 0.0029s
== 20211129171229 CreateChatUploads: migrated (0.0071s) =======================
== 20211201171813 CreateChatReactions: migrating ==============================
-- create_table(:chat_message_reactions)
-> 0.0065s
-- add_index(:chat_message_reactions, [:chat_message_id, :user_id, :emoji], {:unique=>true, :name=>:chat_message_reactions_index})
-> 0.0028s
== 20211201171813 CreateChatReactions: migrated (0.0099s) =====================
== 20211201221028 MigrateEmailToNormalizedEmail: migrating ====================
-- execute("UPDATE user_emails\nSET normalized_email = REPLACE(REGEXP_REPLACE(email,'([+@].*)',''),'.','') || REGEXP_REPLACE(email, '[^@]*', '')\nWHERE (normalized_email IS NULL OR normalized_email <> (REPLACE(REGEXP_REPLACE(email,'([+@].*)',''),'.','') || REGEXP_REPLACE(email, '[^@]*', '')))\n AND (id >= -2 AND id < 156)\n")
-> 0.0026s
== 20211201221028 MigrateEmailToNormalizedEmail: migrated (0.0043s) ===========
== 20211206160211 CreateIndexOnEmailTokensTokenHash: migrating ================
-- add_index(:email_tokens, :token_hash, {:unique=>true, :name=>"index_email_tokens_on_token_hash"})
-> 0.0031s
== 20211206160211 CreateIndexOnEmailTokensTokenHash: migrated (0.0037s) =======
== 20211206160212 DropTokenFromEmailTokens: migrating =========================
== 20211206160212 DropTokenFromEmailTokens: migrated (0.0016s) ================
== 20211207130646 AddDomainToInvites: migrating ===============================
-- add_column(:invites, :domain, :string)
-> 0.0005s
== 20211207130646 AddDomainToInvites: migrated (0.0013s) ======================
== 20211210191830 CreateChatMentions: migrating ===============================
-- create_table(:chat_mentions)
-> 0.0042s
-- add_index(:chat_mentions, [:chat_message_id, :user_id, :notification_id], {:unique=>true, :name=>"chat_mentions_index"})
-> 0.0031s
== 20211210191830 CreateChatMentions: migrated (0.0079s) ======================
== 20211213060445 EmailTokensTokenToNullable: migrating =======================
== 20211213060445 EmailTokensTokenToNullable: migrated (0.0023s) ==============
== 20211213150607 AddChatSoundToUserOptions: migrating ========================
-- add_column(:user_options, :chat_sound, :string, {:null=>true})
-> 0.0005s
== 20211213150607 AddChatSoundToUserOptions: migrated (0.0008s) ===============
== 20211216191224 RemoveAdvancedEditorPreviewSiteSetting: migrating ===========
-- execute("DELETE FROM site_settings WHERE name = 'enable_advanced_editor_preview_sync'")
-> 0.0002s
== 20211216191224 RemoveAdvancedEditorPreviewSiteSetting: migrated (0.0005s) ==
== 20211217221026 AddNameToChatChannel: migrating =============================
-- add_column(:chat_channels, :name, :string, {:null=>true})
-> 0.0003s
== 20211217221026 AddNameToChatChannel: migrated (0.0007s) ====================
== 20211220023034 RemoveExperimentalBackupUploaderSetting: migrating ==========
-- execute("DELETE FROM site_settings\nWHERE name = 'enable_experimental_backup_uploader'\n")
-> 0.0002s
== 20211220023034 RemoveExperimentalBackupUploaderSetting: migrated (0.0005s) =
== 20211221164540 RemoveLimitForFancyTitleInTopics: migrating =================
-- change_column(:topics, :fancy_title, :string, {:limit=>nil})
-> 0.0004s
== 20211221164540 RemoveLimitForFancyTitleInTopics: migrated (0.0008s) ========
== 20211222153716 AddDescriptionToChatChannels: migrating =====================
-- add_column(:chat_channels, :description, :text, {:null=>true})
-> 0.0003s
== 20211222153716 AddDescriptionToChatChannels: migrated (0.0007s) ============
== 20211224010204 DropOldBookmarkColumns: migrating ===========================
== 20211224010204 DropOldBookmarkColumns: migrated (0.0024s) ==================
== 20211224011511 DeleteExperimentalComposerUploadSetting: migrating ==========
-- execute("DELETE FROM site_settings WHERE name = 'enable_experimental_composer_uploader'")
-> 0.0003s
== 20211224011511 DeleteExperimentalComposerUploadSetting: migrated (0.0008s) =
== 20211224111749 NotNullNotificationLevelInCategoryUsers: migrating ==========
-- execute("DELETE FROM category_users WHERE notification_level IS NULL")
-> 0.0002s
-- change_column_null(:category_users, :notification_level, false, nil)
-> 0.0003s
== 20211224111749 NotNullNotificationLevelInCategoryUsers: migrated (0.0008s) =
== 20220104051326 ChangeChatChannelsTimestampColumnsToTimestampType: migrating
-- change_column_default(:chat_channels, :created_at, nil)
-> 0.0016s
-- change_column_default(:chat_channels, :updated_at, nil)
-> 0.0012s
-- column_exists?(:chat_channels, :created_at, :timestamp)
-> 0.0011s
-- change_column(:chat_channels, :created_at, :timestamp)
-> 0.0003s
-- column_exists?(:chat_channels, :updated_at, :timestamp)
-> 0.0010s
-- change_column(:chat_channels, :updated_at, :timestamp)
-> 0.0003s
== 20220104051326 ChangeChatChannelsTimestampColumnsToTimestampType: migrated (0.0060s)
== 20220105024605 AddTriggerForPolymorphicBookmarkColumnsToSyncData: migrating
== 20220105024605 AddTriggerForPolymorphicBookmarkColumnsToSyncData: migrated (0.0005s)
== 20220118065658 AddConstraintsToUserStat: migrating =========================
-- execute("UPDATE user_stats\nSET post_count = 0\nWHERE post_count < 0\n")
-> 0.0002s
-- execute("UPDATE user_stats\nSET topic_count = 0\nWHERE topic_count < 0\n")
-> 0.0001s
-- execute("ALTER TABLE user_stats ADD CONSTRAINT topic_count_positive CHECK (topic_count >= 0)")
-> 0.0004s
-- execute("ALTER TABLE user_stats ADD CONSTRAINT post_count_positive CHECK (post_count >= 0)")
-> 0.0003s
== 20220118065658 AddConstraintsToUserStat: migrated (0.0014s) ================
== 20220119170535 AddChatRetentionFieldsToUserOptions: migrating ==============
-- add_column(:user_options, :dismissed_channel_retention_reminder, :boolean, {:null=>true})
-> 0.0004s
-- add_column(:user_options, :dismissed_dm_retention_reminder, :boolean, {:null=>true})
-> 0.0002s
== 20220119170535 AddChatRetentionFieldsToUserOptions: migrated (0.0010s) =====
== 20220124003259 AddEmailFromAliasToGroups: migrating ========================
-- add_column(:groups, :email_from_alias, :string, {:null=>true})
-> 0.0003s
== 20220124003259 AddEmailFromAliasToGroups: migrated (0.0007s) ===============
== 20220125052845 FixTopicLikeCountIncludingWhispers: migrating ===============
== 20220125052845 FixTopicLikeCountIncludingWhispers: migrated (0.0016s) ======
== 20220126052157 ChangeSegmentCjkSiteSetting: migrating ======================
-- execute("UPDATE site_settings\nSET name = 'search_tokenize_chinese'\nWHERE name = 'search_tokenize_chinese_japanese_korean'\n")
-> 0.0002s
-- execute("DELETE FROM site_settings\nWHERE name = 'search_tokenize_chinese_japanese_korean'\n")
-> 0.0001s
== 20220126052157 ChangeSegmentCjkSiteSetting: migrated (0.0007s) =============
== 20220130192155 SetUseEmailForUsernameAndNameSuggestionsOnExistingSites: migrating
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('use_email_for_username_and_name_suggestions', 5, 't', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0002s
== 20220130192155 SetUseEmailForUsernameAndNameSuggestionsOnExistingSites: migrated (0.0010s)
== 20220202223955 MigrateSelectableAvatarsEnabled: migrating ==================
-- execute("UPDATE site_settings AS s\n SET value =\n CASE WHEN t.value = 't' THEN 'no_one'\n ELSE 'disabled'\n END,\n data_type = 7,\n name = 'selectable_avatars_mode'\n FROM site_settings t\n WHERE s.id = t.id AND s.name = 'selectable_avatars_enabled'\n")
-> 0.0003s
== 20220202223955 MigrateSelectableAvatarsEnabled: migrated (0.0006s) =========
== 20220202225716 AddExternalIdToTopics: migrating ============================
-- add_column(:topics, :external_id, :string, {:null=>true})
-> 0.0004s
-- add_index(:topics, :external_id, {:unique=>true, :where=>"external_id IS NOT NULL", :name=>"index_topics_on_external_id"})
-> 0.0067s
== 20220202225716 AddExternalIdToTopics: migrated (0.0077s) ===================
== 20220203204002 CreateChatDraftsTable: migrating ============================
-- create_table(:chat_drafts)
-> 0.0065s
== 20220203204002 CreateChatDraftsTable: migrated (0.0070s) ===================
== 20220203204003 MigrateDraftsToChatDrafts: migrating ========================
-- execute("INSERT INTO chat_drafts(user_id, chat_channel_id, data, created_at, updated_at)\nSELECT user_id, SUBSTRING(draft_key, LENGTH('chat_') + 1)::integer chat_channel_id, data, created_at, updated_at\nFROM drafts\nWHERE draft_key LIKE 'chat_%'\n")
-> 0.0005s
-- execute("DELETE FROM drafts\nWHERE draft_key LIKE 'chat_%'\n")
-> 0.0001s
== 20220203204003 MigrateDraftsToChatDrafts: migrated (0.0010s) ===============
== 20220209210449 AddBookmarkAutoDeletePreferenceToUserOption: migrating ======
-- add_column(:user_options, :bookmark_auto_delete_preference, :integer, {:default=>3, :null=>false})
-> 0.0006s
== 20220209210449 AddBookmarkAutoDeletePreferenceToUserOption: migrated (0.0010s)
== 20220214224506 ResetCustomEmojiPostBakesVersionSecureFix: migrating ========
== 20220214224506 ResetCustomEmojiPostBakesVersionSecureFix: migrated (0.0005s)
== 20220214233625 AddBounceErrorCodeToEmailLog: migrating =====================
-- add_column(:email_logs, :bounce_error_code, :string, {:null=>true})
-> 0.0004s
== 20220214233625 AddBounceErrorCodeToEmailLog: migrated (0.0007s) ============
== 20220215015538 DropUserStatCountConstraints: migrating =====================
-- execute("ALTER TABLE user_stats DROP CONSTRAINT topic_count_positive")
-> 0.0003s
-- execute("ALTER TABLE user_stats DROP CONSTRAINT post_count_positive")
-> 0.0002s
== 20220215015538 DropUserStatCountConstraints: migrated (0.0008s) ============
== 20220218023859 AddStatusToChatChannel: migrating ===========================
-- add_column(:chat_channels, :status, :integer, {:default=>0, :null=>false})
-> 0.0007s
-- add_index(:chat_channels, :status, {:name=>"index_chat_channels_on_status"})
-> 0.0031s
== 20220218023859 AddStatusToChatChannel: migrated (0.0044s) ==================
== 20220220234155 ConformBounceErrorCode: migrating ===========================
== 20220220234155 ConformBounceErrorCode: migrated (0.0008s) ==================
== 20220228051724 CreateChatChannelArchiveTable: migrating ====================
-- create_table(:chat_channel_archives)
-> 0.0067s
-- add_index(:chat_channel_archives, :chat_channel_id, {:name=>"index_chat_channel_archives_on_chat_channel_id"})
-> 0.0028s
== 20220228051724 CreateChatChannelArchiveTable: migrated (0.0100s) ===========
== 20220302163246 UpdateAvatarServiceDomain: migrating ========================
== 20220302163246 UpdateAvatarServiceDomain: migrated (0.0006s) ===============
== 20220302171443 RebakeOldAvatarServiceUrls: migrating =======================
== 20220302171443 RebakeOldAvatarServiceUrls: migrated (0.0011s) ==============
== 20220304162250 EnableUnaccentExtension: migrating ==========================
-- enable_extension("unaccent")
-> 0.0033s
== 20220304162250 EnableUnaccentExtension: migrated (0.0038s) =================
== 20220308165620 AddUserCountToChatChannel: migrating ========================
-- add_column(:chat_channels, :user_count, :integer, {:null=>true, :default=>0})
-> 0.0006s
-- change_column_null(:chat_channels, :user_count, false, nil)
-> 0.0002s
== 20220308165620 AddUserCountToChatChannel: migrated (0.0012s) ===============
== 20220308201942 CreateUploadReferences: migrating ===========================
-- create_table(:upload_references)
-> 0.0119s
-- add_index(:upload_references, [:upload_id, :target_type, :target_id], {:unique=>true, :name=>"index_upload_references_on_upload_and_target"})
-> 0.0022s
== 20220308201942 CreateUploadReferences: migrated (0.0147s) ==================
== 20220309132719 CopyPostUploadsToUploadReferences: migrating ================
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT post_uploads.upload_id, 'Post', post_uploads.post_id, uploads.created_at, uploads.updated_at\nFROM post_uploads\nJOIN uploads ON uploads.id = post_uploads.upload_id\nON CONFLICT DO NOTHING\n")
-> 0.0014s
== 20220309132719 CopyPostUploadsToUploadReferences: migrated (0.0018s) =======
== 20220309132720 CopyPostUploadsToUploadReferencesForSync: migrating =========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT upload_id, 'Post', post_id, NOW(), NOW()\nFROM post_uploads\nON CONFLICT DO NOTHING\n")
-> 0.0004s
== 20220309132720 CopyPostUploadsToUploadReferencesForSync: migrated (0.0008s)
== 20220309174820 AddLastMessageCreatedAtToChatChannels: migrating ============
-- add_column(:chat_channels, :last_message_sent_at, :timestamp, {:default=>#<Proc:0x0000fb5cceada2b0 /var/www/discourse/plugins/chat/db/migrate/20220309174820_add_last_message_created_at_to_chat_channels.rb:4 (lambda)>, :precision=>nil})
-> 0.0005s
-- change_column_null(:chat_channels, :last_message_sent_at, false, nil)
-> 0.0002s
== 20220309174820 AddLastMessageCreatedAtToChatChannels: migrated (0.0012s) ===
== 20220316150247 ResetBookmarksReminderLastSentAt: migrating =================
== 20220316150247 ResetBookmarksReminderLastSentAt: migrated (0.0007s) ========
== 20220321235638 DropChatMessagePostConnectionsTable: migrating ==============
== 20220321235638 DropChatMessagePostConnectionsTable: migrated (0.0016s) =====
== 20220322024216 AddBookmarkPolymorphicColumns: migrating ====================
-- column_exists?(:bookmarks, :bookmarkable_id)
-> 0.0015s
-- add_column(:bookmarks, :bookmarkable_id, :integer)
-> 0.0005s
-- column_exists?(:bookmarks, :bookmarkable_type)
-> 0.0011s
-- add_column(:bookmarks, :bookmarkable_type, :string)
-> 0.0037s
-- index_exists?(:bookmarks, [:user_id, :bookmarkable_type, :bookmarkable_id])
-> 0.0024s
-- add_index(:bookmarks, [:user_id, :bookmarkable_type, :bookmarkable_id], {:name=>"idx_bookmarks_user_polymorphic_unique", :unique=>true})
-> 0.0029s
== 20220322024216 AddBookmarkPolymorphicColumns: migrated (0.0129s) ===========
== 20220323141645 RemovePollingSiteSettings: migrating ========================
-- execute("DELETE FROM site_settings WHERE name = 'enable_long_polling'")
-> 0.0002s
-- execute("DELETE FROM site_settings WHERE name = 'long_polling_interval'")
-> 0.0001s
== 20220323141645 RemovePollingSiteSettings: migrated (0.0007s) ===============
== 20220324062937 IgnoreChannelWideMentionToUserOptions: migrating ============
-- add_column(:user_options, :ignore_channel_wide_mention, :boolean, {:null=>true})
-> 0.0005s
== 20220324062937 IgnoreChannelWideMentionToUserOptions: migrated (0.0009s) ===
== 20220325064954 MakeSomeBookmarkColumnsNullable: migrating ==================
-- change_column_null(:bookmarks, :post_id, true, nil)
-> 0.0002s
-- execute("ALTER TABLE bookmarks ADD CONSTRAINT enforce_post_id_or_bookmarkable CHECK (\n (post_id IS NOT NULL) OR (bookmarkable_id IS NOT NULL AND bookmarkable_type IS NOT NULL)\n )")
-> 0.0003s
== 20220325064954 MakeSomeBookmarkColumnsNullable: migrated (0.0009s) =========
== 20220328142120 CreateUserChatMessageStatuses: migrating ====================
-- create_table(:chat_message_email_statuses)
-> 0.0040s
-- add_index(:chat_message_email_statuses, [:user_id, :chat_message_id], {:name=>"chat_message_email_status_user_message_index"})
-> 0.0025s
-- add_index(:chat_message_email_statuses, :status, {:name=>"index_chat_message_email_statuses_on_status"})
-> 0.0023s
-- add_column(:user_options, :chat_email_frequency, :integer, {:default=>1, :null=>false})
-> 0.0008s
-- add_column(:user_options, :last_emailed_for_chat, :timestamp, {:null=>true, :precision=>nil})
-> 0.0003s
== 20220328142120 CreateUserChatMessageStatuses: migrated (0.0106s) ===========
== 20220330160740 CleanupSelectableAvatarsData: migrating =====================
-- execute("DELETE FROM site_settings\nWHERE name = 'selectable_avatars_urls'\n")
-> 0.0002s
== 20220330160740 CleanupSelectableAvatarsData: migrated (0.0006s) ============
== 20220330160747 CopySiteSettingsUploadsToUploadReferences: migrating ========
-- execute("WITH site_settings_uploads AS (\n SELECT id, raw_upload_id::integer AS upload_id\n FROM (\n SELECT id, unnest(string_to_array(value, '|')) AS raw_upload_id\n FROM site_settings\n WHERE data_type = 17\n ) raw\n WHERE raw_upload_id ~ '^d+$'\n UNION\n SELECT id, value::integer\n FROM site_settings\n WHERE data_type = 18 AND value != ''\n)\nINSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT site_settings_uploads.upload_id, 'SiteSetting', site_settings_uploads.id, uploads.created_at, uploads.updated_at\nFROM site_settings_uploads\nJOIN uploads ON uploads.id = site_settings_uploads.upload_id\nON CONFLICT DO NOTHING\n")
-> 0.0009s
== 20220330160747 CopySiteSettingsUploadsToUploadReferences: migrated (0.0013s)
== 20220330160751 CopyBadgesUploadsToUploadReferences: migrating ==============
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT badges.image_upload_id, 'Badge', badges.id, uploads.created_at, uploads.updated_at\nFROM badges\nJOIN uploads ON uploads.id = badges.image_upload_id\nWHERE badges.image_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0004s
== 20220330160751 CopyBadgesUploadsToUploadReferences: migrated (0.0008s) =====
== 20220330160754 CopyGroupsUploadsToUploadReferences: migrating ==============
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT groups.flair_upload_id, 'Group', groups.id, uploads.created_at, uploads.updated_at\nFROM groups\nJOIN uploads ON uploads.id = groups.flair_upload_id\nWHERE groups.flair_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0005s
== 20220330160754 CopyGroupsUploadsToUploadReferences: migrated (0.0009s) =====
== 20220330160757 CopyUserExportsUploadsToUploadReferences: migrating =========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_exports.upload_id, 'UserExport', user_exports.id, uploads.created_at, uploads.updated_at\nFROM user_exports\nJOIN uploads ON uploads.id = user_exports.upload_id\nON CONFLICT DO NOTHING\n")
-> 0.0005s
== 20220330160757 CopyUserExportsUploadsToUploadReferences: migrated (0.0008s)
== 20220330164740 CopyThemeFieldsUploadsToUploadReferences: migrating =========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT theme_fields.upload_id, 'ThemeField', theme_fields.id, uploads.created_at, uploads.updated_at\nFROM theme_fields\nJOIN uploads ON uploads.id = theme_fields.upload_id\nWHERE type_id = 2\nON CONFLICT DO NOTHING\n")
-> 0.0005s
== 20220330164740 CopyThemeFieldsUploadsToUploadReferences: migrated (0.0008s)
== 20220331204447 CreateSitemapsTable: migrating ==============================
-- create_table(:sitemaps, {:if_not_exists=>true})
-> 0.0061s
-- add_index(:sitemaps, :name, {:unique=>true, :if_not_exists=>true, :name=>"index_sitemaps_on_name"})
-> 0.0023s
== 20220331204447 CreateSitemapsTable: migrated (0.0090s) =====================
== 20220401130745 CreateCategoryRequiredTagGroups: migrating ==================
-- create_table(:category_required_tag_groups)
-> 0.0038s
-- add_index(:category_required_tag_groups, [:category_id, :tag_group_id], {:name=>"idx_category_required_tag_groups", :unique=>true})
-> 0.0024s
-- execute("INSERT INTO category_required_tag_groups\n(category_id, tag_group_id, min_count, updated_at, created_at)\nSELECT c.id, c.required_tag_group_id, c.min_tags_from_required_group, NOW(), NOW()\nFROM categories c\nINNER JOIN tag_groups tg ON tg.id = c.required_tag_group_id\nWHERE tg.id IS NOT NULL\n")
-> 0.0007s
== 20220401130745 CreateCategoryRequiredTagGroups: migrated (0.0076s) =========
== 20220401140745 DropCategoryRequiredTagGroupColumns: migrating ==============
== 20220401140745 DropCategoryRequiredTagGroupColumns: migrated (0.0026s) =====
== 20220404195635 CopyCategoriesUploadsToUploadReferences: migrating ==========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT categories.uploaded_logo_id, 'Category', categories.id, uploads.created_at, uploads.updated_at\nFROM categories\nJOIN uploads ON uploads.id = categories.uploaded_logo_id\nWHERE categories.uploaded_logo_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0006s
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT categories.uploaded_background_id, 'Category', categories.id, uploads.created_at, uploads.updated_at\nFROM categories\nJOIN uploads ON uploads.id = categories.uploaded_background_id\nWHERE categories.uploaded_background_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0004s
== 20220404195635 CopyCategoriesUploadsToUploadReferences: migrated (0.0014s) =
== 20220404201949 CopyCustomEmojisUploadsToUploadReferences: migrating ========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT custom_emojis.upload_id, 'CustomEmoji', custom_emojis.id, uploads.created_at, uploads.updated_at\nFROM custom_emojis\nJOIN uploads ON uploads.id = custom_emojis.upload_id\nWHERE custom_emojis.upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0006s
== 20220404201949 CopyCustomEmojisUploadsToUploadReferences: migrated (0.0009s)
== 20220404203356 CopyUserProfilesUploadsToUploadReferences: migrating ========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_profiles.profile_background_upload_id, 'UserProfile', user_profiles.user_id, uploads.created_at, uploads.updated_at\nFROM user_profiles\nJOIN uploads ON uploads.id = user_profiles.profile_background_upload_id\nWHERE user_profiles.profile_background_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0007s
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_profiles.card_background_upload_id, 'UserProfile', user_profiles.user_id, uploads.created_at, uploads.updated_at\nFROM user_profiles\nJOIN uploads ON uploads.id = user_profiles.card_background_upload_id\nWHERE user_profiles.card_background_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0004s
== 20220404203356 CopyUserProfilesUploadsToUploadReferences: migrated (0.0015s)
== 20220404204439 CopyUserAvatarsUploadsToUploadReferences: migrating =========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_avatars.custom_upload_id, 'UserAvatar', user_avatars.id, uploads.created_at, uploads.updated_at\nFROM user_avatars\nJOIN uploads ON uploads.id = user_avatars.custom_upload_id\nWHERE user_avatars.custom_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0007s
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_avatars.gravatar_upload_id, 'UserAvatar', user_avatars.id, uploads.created_at, uploads.updated_at\nFROM user_avatars\nJOIN uploads ON uploads.id = user_avatars.gravatar_upload_id\nWHERE user_avatars.gravatar_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0004s
== 20220404204439 CopyUserAvatarsUploadsToUploadReferences: migrated (0.0015s)
== 20220404212716 CopyThemeSettingsUploadsToUploadReferences: migrating =======
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT theme_settings.value::int, 'ThemeSetting', theme_settings.id, uploads.created_at, uploads.updated_at\nFROM theme_settings\nJOIN uploads ON uploads.id = theme_settings.value::int\nWHERE data_type = 6 AND theme_settings.value IS NOT NULL AND theme_settings.value != ''\nON CONFLICT DO NOTHING\n")
-> 0.0004s
== 20220404212716 CopyThemeSettingsUploadsToUploadReferences: migrated (0.0007s)
== 20220407195246 RemoveCategoryRequiredTagGroupsWithoutTagGroups: migrating ==
-- execute("DELETE FROM category_required_tag_groups\nWHERE id IN (\n SELECT crtg.id\n FROM category_required_tag_groups crtg\n LEFT OUTER JOIN tag_groups tg ON crtg.tag_group_id = tg.id\n WHERE tg.id IS NULL\n)\n")
-> 0.0005s
== 20220407195246 RemoveCategoryRequiredTagGroupsWithoutTagGroups: migrated (0.0009s)
== 20220419124720 ConvertRecurrenceToCustomField: migrating ===================
== 20220419124720 ConvertRecurrenceToCustomField: migrated (0.0004s) ==========
== 20220428025825 AddEnableExperimentalSidebarToUserOptions: migrating ========
-- add_column(:user_options, :enable_experimental_sidebar, :boolean, {:default=>false})
-> 0.0008s
== 20220428025825 AddEnableExperimentalSidebarToUserOptions: migrated (0.0011s)
== 20220428094026 CreatePostHotlinkedMedia: migrating =========================
-- execute("CREATE TYPE hotlinked_media_status AS ENUM('downloaded', 'too_large', 'download_failed', 'upload_create_failed')\n")
-> 0.0004s
-- create_table(:post_hotlinked_media)
-> 0.0059s
-- execute("CREATE UNIQUE INDEX index_post_hotlinked_media_on_post_id_and_url_md5\nON post_hotlinked_media (post_id, md5(url));\n")
-> 0.0025s
-- execute("INSERT INTO post_hotlinked_media (post_id, url, status, upload_id, created_at, updated_at)\nSELECT\n post_id,\n obj.key AS url,\n 'downloaded',\n obj.value::bigint AS upload_id,\n pcf.created_at,\n pcf.updated_at\nFROM post_custom_fields pcf\nJOIN json_each_text(pcf.value::json) obj ON true\nJOIN uploads ON obj.value::bigint = uploads.id\nWHERE name='downloaded_images'\nAND pcf.value LIKE '{%' -- JSON Object\nON CONFLICT (post_id, md5(url::text)) DO NOTHING\n")
-> 0.0020s
-- execute("INSERT INTO post_hotlinked_media (post_id, url, status, upload_id, created_at, updated_at)\nSELECT\n post_id,\n url.value,\n 'download_failed',\n NULL,\n pcf.created_at,\n pcf.updated_at\nFROM post_custom_fields pcf\nJOIN json_array_elements_text(pcf.value::json) url ON true\nWHERE name='broken_images'\nAND pcf.value LIKE '[%' -- JSON Array\nON CONFLICT (post_id, md5(url::text)) DO NOTHING\n")
-> 0.0004s
-- execute("INSERT INTO post_hotlinked_media (post_id, url, status, upload_id, created_at, updated_at)\nSELECT\n post_id,\n url.value,\n 'too_large',\n NULL,\n pcf.created_at,\n pcf.updated_at\nFROM post_custom_fields pcf\nJOIN json_array_elements_text(pcf.value::json) url ON true\nWHERE name='large_images'\nAND pcf.value LIKE '[%' -- JSON Array\nON CONFLICT (post_id, md5(url::text)) DO NOTHING\n")
-> 0.0003s
== 20220428094026 CreatePostHotlinkedMedia: migrated (0.0122s) ================
== 20220428094027 FixPostHotlinkedMediaIndex: migrating =======================
-- execute("CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS index_post_hotlinked_media_on_post_id_and_url_md5\nON post_hotlinked_media (post_id, md5(url));\n")
-> 0.0003s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_post_hotlinked_media_on_post_id_and_url;\n")
-> 0.0002s
== 20220428094027 FixPostHotlinkedMediaIndex: migrated (0.0015s) ==============
== 20220429164301 DeleteHotlinkedImageCustomFields: migrating =================
-- execute("DELETE FROM post_custom_fields\nWHERE name IN (\n 'downloaded_images',\n 'broken_images',\n 'large_images'\n)\n")
-> 0.0004s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS post_custom_field_broken_images_idx\n")
-> 0.0048s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS post_custom_field_downloaded_images_idx\n")
-> 0.0046s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS post_custom_field_large_images_idx\n")
-> 0.0042s
== 20220429164301 DeleteHotlinkedImageCustomFields: migrated (0.0146s) ========
== 20220504080457 DropOldChatMessagePostIdActionCodeColumns: migrating ========
== 20220504080457 DropOldChatMessagePostIdActionCodeColumns: migrated (0.0022s)
== 20220505133851 MigrateCustomGroupDeletionLogs: migrating ===================
== 20220505133851 MigrateCustomGroupDeletionLogs: migrated (0.0008s) ==========
== 20220505191131 AddLastSeenReviewableIdToUser: migrating ====================
-- add_column(:users, :last_seen_reviewable_id, :integer)
-> 0.0004s
== 20220505191131 AddLastSeenReviewableIdToUser: migrated (0.0007s) ===========
== 20220506221447 SetPmTagsAllowedForGroupsDefault: migrating =================
== 20220506221447 SetPmTagsAllowedForGroupsDefault: migrated (0.0004s) ========
== 20220510131525 RemoveAllowStaffToTagPmsSiteSetting: migrating ==============
-- execute("DELETE FROM site_settings WHERE name = 'allow_staff_to_tag_pms'")
-> 0.0002s
== 20220510131525 RemoveAllowStaffToTagPmsSiteSetting: migrated (0.0005s) =====
== 20220512011522 BackfillPolymorphicBookmarksAndMakeDefault: migrating =======
== 20220512011522 BackfillPolymorphicBookmarksAndMakeDefault: migrated (0.0016s)
== 20220512011531 BackfillPolymorphicBookmarks: migrating =====================
== 20220512011531 BackfillPolymorphicBookmarks: migrated (0.0007s) ============
== 20220516142658 RemoveEmailStatusesTable: migrating =========================
-- remove_index(:chat_message_email_statuses, :status)
-> 0.0020s
-- remove_index(:chat_message_email_statuses, [:user_id, :chat_message_id])
-> 0.0014s
== 20220516142658 RemoveEmailStatusesTable: migrated (0.0047s) ================
== 20220518140004 TrackLastUnreadMentionWhenEmailed: migrating ================
-- add_column(:user_chat_channel_memberships, :last_unread_mention_when_emailed_id, :integer)
-> 0.0005s
== 20220518140004 TrackLastUnreadMentionWhenEmailed: migrated (0.0009s) =======
== 20220518180642 RemoveUserOptionLastEmailedAt: migrating ====================
-- remove_column(:user_options, :last_emailed_for_chat, :datetime)
-> 0.0004s
== 20220518180642 RemoveUserOptionLastEmailedAt: migrated (0.0008s) ===========
== 20220519190829 CreateUserStatuses: migrating ===============================
-- create_table(:user_statuses, {:id=>false})
-> 0.0078s
== 20220519190829 CreateUserStatuses: migrated (0.0085s) ======================
== 20220526135414 RemoveCorruptedLastReadMessageId: migrating =================
-- execute("DELETE FROM user_chat_channel_memberships uccm\nWHERE NOT EXISTS (\n SELECT FROM chat_channels cc\n WHERE cc.id = uccm.chat_channel_id\n);\n")
-> 0.0008s
-- execute("DELETE FROM chat_messages cm\nWHERE NOT EXISTS (\n SELECT FROM chat_channels cc\n WHERE cc.id = cm.chat_channel_id\n);\n")
-> 0.0004s
-- execute("WITH highest_channel_message_id AS (\n SELECT chat_channel_id, max(chat_messages.id) as highest_id\n FROM chat_messages\n GROUP BY chat_channel_id\n)\nUPDATE user_chat_channel_memberships uccm\nSET last_read_message_id = highest_channel_message_id.highest_id\nFROM highest_channel_message_id\nWHERE highest_channel_message_id.chat_channel_id = uccm.chat_channel_id\nAND uccm.last_read_message_id IS NOT NULL\nAND uccm.last_read_message_id NOT IN (\n SELECT id FROM chat_messages WHERE chat_messages.chat_channel_id = uccm.chat_channel_id\n)\n")
-> 0.0005s
-- execute("UPDATE chat_messages cm\nSET in_reply_to_id = NULL\nWHERE NOT EXISTS (\n SELECT FROM chat_messages cm2\n WHERE cm.in_reply_to_id = cm2.id\n);\n")
-> 0.0002s
-- execute("DELETE FROM chat_message_revisions cmr\nWHERE NOT EXISTS (\n SELECT FROM chat_messages cm\n WHERE cm.id = cmr.chat_message_id\n);\n")
-> 0.0004s
-- execute("DELETE FROM chat_message_reactions cmr\nWHERE NOT EXISTS (\n SELECT FROM chat_messages cm\n WHERE cm.id = cmr.chat_message_id\n);\n")
-> 0.0004s
-- execute("DELETE FROM bookmarks b\nWHERE b.bookmarkable_type = 'ChatMessage'\nAND NOT EXISTS (\n SELECT FROM chat_messages cm\n WHERE cm.id = b.bookmarkable_id\n);\n")
-> 0.0003s
-- execute("DELETE FROM chat_mentions\nWHERE NOT EXISTS (\n SELECT FROM chat_messages cm\n WHERE cm.id = chat_mentions.chat_message_id\n);\n")
-> 0.0004s
-- execute("DELETE FROM chat_webhook_events cwe\nWHERE NOT EXISTS (\n SELECT FROM chat_messages cm\n WHERE cm.id = cwe.chat_message_id\n);\n")
-> 0.0003s
-- execute("DELETE FROM chat_uploads\nWHERE NOT EXISTS (\n SELECT FROM chat_messages cm\n WHERE cm.id = chat_uploads.chat_message_id\n);\n")
-> 0.0004s
== 20220526135414 RemoveCorruptedLastReadMessageId: migrated (0.0048s) ========
== 20220526203356 CopyUserUploadsToUploadReferences: migrating ================
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT users.uploaded_avatar_id, 'User', users.id, uploads.created_at, uploads.updated_at\nFROM users\nJOIN uploads ON uploads.id = users.uploaded_avatar_id\nWHERE users.uploaded_avatar_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
-> 0.0008s
== 20220526203356 CopyUserUploadsToUploadReferences: migrated (0.0012s) =======
== 20220531105951 DropUserChatChannelLastReads: migrating =====================
== 20220531105951 DropUserChatChannelLastReads: migrated (0.0016s) ============
== 20220606061813 AddSmtpTransactionResponseToEmailLogs: migrating ============
-- add_column(:email_logs, :smtp_transaction_response, :string, {:null=>true, :limit=>500})
-> 0.0005s
== 20220606061813 AddSmtpTransactionResponseToEmailLogs: migrated (0.0010s) ===
== 20220607150432 DisallowNullEmojiOnUserStatus: migrating ====================
-- execute("UPDATE user_statuses SET emoji = 'speech_balloon'")
-> 0.0004s
-- change_column(:user_statuses, :emoji, :string, {:null=>false})
-> 0.0003s
== 20220607150432 DisallowNullEmojiOnUserStatus: migrated (0.0011s) ===========
== 20220617151846 RenameDefaultCategoriesRegularSetting: migrating ============
-- execute("UPDATE site_settings\nSET name = 'default_categories_normal'\nWHERE name = 'default_categories_regular'\n")
-> 0.0002s
== 20220617151846 RenameDefaultCategoriesRegularSetting: migrated (0.0005s) ===
== 20220621164914 DropFlairUrlFromGroups: migrating ===========================
== 20220621164914 DropFlairUrlFromGroups: migrated (0.0014s) ==================
== 20220628031850 CreateSidebarSectionLinks: migrating ========================
-- create_table(:sidebar_section_links)
-> 0.0161s
-- add_index(:sidebar_section_links, [:user_id, :linkable_type, :linkable_id], {:unique=>true, :name=>"idx_unique_sidebar_section_links"})
-> 0.0026s
== 20220628031850 CreateSidebarSectionLinks: migrated (0.0193s) ===============
== 20220629190633 AutoJoinUsersToChannels: migrating ==========================
-- add_column(:chat_channels, :auto_join_users, :boolean, {:null=>false, :default=>false})
-> 0.0007s
== 20220629190633 AutoJoinUsersToChannels: migrated (0.0011s) =================
== 20220630074200 DropChatIsolatedFromUserOptions: migrating ==================
== 20220630074200 DropChatIsolatedFromUserOptions: migrated (0.0015s) =========
== 20220701195731 ConvertChatableTopicsToCategories: migrating ================
== 20220701195731 ConvertChatableTopicsToCategories: migrated (0.0019s) =======
== 20220706114835 AddJoinModeToChannelMemberships: migrating ==================
-- add_column(:user_chat_channel_memberships, :join_mode, :integer, {:null=>false, :default=>0})
-> 0.0006s
== 20220706114835 AddJoinModeToChannelMemberships: migrated (0.0010s) =========
== 20220712040959 AddCaseSensitiveToWatchedWords: migrating ===================
-- add_column(:watched_words, :case_sensitive, :boolean, {:default=>false, :null=>false})
-> 0.0005s
== 20220712040959 AddCaseSensitiveToWatchedWords: migrated (0.0008s) ==========
== 20220726164831 FixDeleteRejectedEmailAfterDaysSiteSetting: migrating =======
== 20220726164831 FixDeleteRejectedEmailAfterDaysSiteSetting: migrated (0.0005s)
== 20220727040437 AddTopicTimersIndex: migrating ==============================
-- add_index(:topic_timers, [:topic_id], {:where=>"deleted_at IS NULL", :name=>"index_topic_timers_on_topic_id"})
-> 0.0044s
== 20220727040437 AddTopicTimersIndex: migrated (0.0055s) =====================
== 20220727085001 CreateIndexOnReviewablesScoreDescCreatedAtDesc: migrating ===
-- add_index(:reviewables, [:score, :created_at], {:order=>{:score=>:desc, :created_at=>:desc}, :name=>"idx_reviewables_score_desc_created_at_desc"})
-> 0.0027s
== 20220727085001 CreateIndexOnReviewablesScoreDescCreatedAtDesc: migrated (0.0032s)
== 20220729032237 AddIndexToChatMessageCreatedAt: migrating ===================
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS\nidx_chat_messages_by_created_at_not_deleted\nON chat_messages (created_at)\nWHERE deleted_at IS NULL\n")
-> 0.0027s
== 20220729032237 AddIndexToChatMessageCreatedAt: migrated (0.0032s) ==========
== 20220801044610 AddOutboundMessageIdToPost: migrating =======================
-- add_column(:posts, :outbound_message_id, :string)
-> 0.0005s
== 20220801044610 AddOutboundMessageIdToPost: migrated (0.0008s) ==============
== 20220802014549 DisableChatUploadsIfSecureMediaEnabled: migrating ===========
== 20220802014549 DisableChatUploadsIfSecureMediaEnabled: migrated (0.0007s) ==
== 20220811170600 ResetFlairGroupIdIfNotGroupMember: migrating ================
-- execute("UPDATE users\nSET flair_group_id = NULL\nWHERE flair_group_id IS NOT NULL AND NOT EXISTS (\n SELECT 1\n FROM group_users\n WHERE group_users.user_id = users.id\n AND group_users.group_id = users.flair_group_id\n)\n")
-> 0.0007s
== 20220811170600 ResetFlairGroupIdIfNotGroupMember: migrated (0.0010s) =======
== 20220818171849 MoveTlUserHistoryToPreviousAndNewValue: migrating ===========
-- execute("UPDATE user_histories\nSET previous_value = old_tl,\n new_value = new_tl,\n details = NULL\nFROM (\n SELECT id user_history_id,\n (REGEXP_MATCHES(details, 'old trust level: (d+)', 'i'))[1] old_tl,\n (REGEXP_MATCHES(details, 'new trust level: (d+)', 'i'))[1] new_tl\n FROM user_histories\n WHERE action = 2\n) trust_levels\nWHERE user_histories.id = trust_levels.user_history_id\n")
-> 0.0008s
== 20220818171849 MoveTlUserHistoryToPreviousAndNewValue: migrated (0.0012s) ==
== 20220825005115 BackfillOutboundMessageId: migrating ========================
== 20220825005115 BackfillOutboundMessageId: migrated (0.0013s) ===============
== 20220825054405 FillPersonalMessageEnabledGroupsBasedOnDeprecatedSettings: migrating
== 20220825054405 FillPersonalMessageEnabledGroupsBasedOnDeprecatedSettings: migrated (0.0008s)
== 20220901034107 AddUserCountStaleToChannel: migrating =======================
-- add_column(:chat_channels, :user_count_stale, :boolean, {:default=>false, :null=>false})
-> 0.0012s
== 20220901034107 AddUserCountStaleToChannel: migrated (0.0016s) ==============
== 20220915132547 AddDominantColorToUploads: migrating ========================
-- add_column(:uploads, :dominant_color, :text, {:null=>true})
-> 0.0004s
-- add_index(:uploads, :id, {:where=>"dominant_color IS NULL", :name=>"index_uploads_on_id"})
-> 0.0051s
== 20220915132547 AddDominantColorToUploads: migrated (0.0060s) ===============
== 20220920044310 EnforceUserProfileMaxLimits: migrating ======================
-- execute("UPDATE user_profiles SET location = LEFT(location, 3000) WHERE location IS NOT NULL AND LENGTH(location) > 3000")
-> 0.0003s
-- execute("UPDATE user_profiles SET website = LEFT(website, 3000) WHERE website IS NOT NULL AND LENGTH(website) > 3000")
-> 0.0002s
-- change_column(:user_profiles, :location, :string, {:limit=>3000})
-> 0.0141s
-- change_column(:user_profiles, :website, :string, {:limit=>3000})
-> 0.0139s
== 20220920044310 EnforceUserProfileMaxLimits: migrated (0.0293s) =============
== 20220923212549 AddSeenPopupsToUserOptions: migrating =======================
-- add_column(:user_options, :seen_popups, :integer, {:array=>true})
-> 0.0006s
== 20220923212549 AddSeenPopupsToUserOptions: migrated (0.0012s) ==============
== 20220927065328 SetSecureUploadsSettingsBasedOnSecureMediaEquivalent: migrating
== 20220927065328 SetSecureUploadsSettingsBasedOnSecureMediaEquivalent: migrated (0.0008s)
== 20220927171707 DisableAllowUncategorizedNewSites: migrating ================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('allow_uncategorized_topics', 5, 't', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0002s
== 20220927171707 DisableAllowUncategorizedNewSites: migrated (0.0010s) =======
== 20221004122254 DeleteReviewablesTargettingDeletedChatMessages: migrating ===
== 20221004122254 DeleteReviewablesTargettingDeletedChatMessages: migrated (0.0023s)
== 20221004122343 AddDarkModeLogoToCategories: migrating ======================
-- add_column(:categories, :uploaded_logo_dark_id, :integer, {:index=>true})
-> 0.0005s
== 20221004122343 AddDarkModeLogoToCategories: migrated (0.0009s) =============
== 20221005143622 AddTypeToChatChannel: migrating =============================
-- add_column(:chat_channels, :type, :string)
-> 0.0003s
== 20221005143622 AddTypeToChatChannel: migrated (0.0007s) ====================
== 20221006130454 AddAutoResponderTriggeredIdsIndex: migrating ================
-- add_index(:topic_custom_fields, [:topic_id, :value], {:unique=>true, :where=>"name = 'auto_responder_triggered_ids'", :name=>:idx_topic_custom_fields_auto_responder_triggered_ids_partial})
-> 0.0056s
== 20221006130454 AddAutoResponderTriggeredIdsIndex: migrated (0.0061s) =======
== 20221013045158 AddSidebarListDestinationToUserOption: migrating ============
-- add_column(:user_options, :sidebar_list_destination, :integer, {:default=>0, :null=>false})
-> 0.0008s
== 20221013045158 AddSidebarListDestinationToUserOption: migrated (0.0012s) ===
== 20221014005208 AddSlugColumnToChatChannel: migrating =======================
-- add_column(:chat_channels, :slug, :string)
-> 0.0004s
-- add_index(:chat_channels, :slug, {:name=>"index_chat_channels_on_slug"})
-> 0.0029s
== 20221014005208 AddSlugColumnToChatChannel: migrated (0.0039s) ==============
== 20221017223309 FixGeneralCategoryId: migrating =============================
== 20221017223309 FixGeneralCategoryId: migrated (0.0006s) ====================
== 20221018091412 MigrateChatChannels: migrating ==============================
== 20221018091412 MigrateChatChannels: migrated (0.0008s) =====================
== 20221018100550 AddSourceMapToJavascriptCache: migrating ====================
-- add_column(:javascript_caches, :source_map, :text)
-> 0.0008s
== 20221018100550 AddSourceMapToJavascriptCache: migrated (0.0012s) ===========
== 20221026035440 SecurityLogOutInviteRedemptionInvitedUsers: migrating =======
== 20221026035440 SecurityLogOutInviteRedemptionInvitedUsers: migrated (0.0020s)
== 20221027090832 MigrateDmChannels: migrating ================================
== 20221027090832 MigrateDmChannels: migrated (0.0005s) =======================
== 20221101061319 AddLastEditorIdToChatMessages: migrating ====================
-- add_column(:chat_messages, :last_editor_id, :integer)
-> 0.0004s
-- add_column(:chat_message_revisions, :user_id, :integer)
-> 0.0003s
-- add_index(:chat_messages, :last_editor_id, {:name=>"index_chat_messages_on_last_editor_id"})
-> 0.0028s
-- add_index(:chat_message_revisions, :user_id, {:name=>"index_chat_message_revisions_on_user_id"})
-> 0.0027s
== 20221101061319 AddLastEditorIdToChatMessages: migrated (0.0068s) ===========
== 20221101140632 RenameOnboardingPopupsSiteSetting: migrating ================
-- execute("UPDATE site_settings SET name = 'enable_user_tips' WHERE name = 'enable_onboarding_popups'")
-> 0.0002s
== 20221101140632 RenameOnboardingPopupsSiteSetting: migrated (0.0006s) =======
== 20221101181505 HideAllUserTipsForExistentUsers: migrating ==================
-- execute("UPDATE user_options SET seen_popups = '{1, 2}'")
-> 0.0014s
== 20221101181505 HideAllUserTipsForExistentUsers: migrated (0.0018s) =========
== 20221103051248 RemoveInvalidTopicAllowedUsersFromInvites: migrating ========
== 20221103051248 RemoveInvalidTopicAllowedUsersFromInvites: migrated (0.0023s)
== 20221104054957 BackfillChannelSlugs: migrating =============================
== 20221104054957 BackfillChannelSlugs: migrated (0.0008s) ====================
== 20221107034541 MakeChatEditorIdsNotNull: migrating =========================
-- change_column_null(:chat_messages, :last_editor_id, false, nil)
-> 0.0003s
-- change_column_null(:chat_message_revisions, :user_id, false, nil)
-> 0.0002s
== 20221107034541 MakeChatEditorIdsNotNull: migrated (0.0014s) ================
== 20221108032233 DropOldBookmarkColumnsV2: migrating =========================
== 20221108032233 DropOldBookmarkColumnsV2: migrated (0.0026s) ================
== 20221110175456 PopulateDefaultComposerCategory: migrating ==================
== 20221110175456 PopulateDefaultComposerCategory: migrated (0.0007s) =========
== 20221114215902 HideUserTips3To5ForExistingUsers: migrating =================
-- execute("UPDATE user_options SET seen_popups = seen_popups || '{3, 4, 5}'")
-> 0.0014s
== 20221114215902 HideUserTips3To5ForExistingUsers: migrated (0.0019s) ========
== 20221117052348 TruncateChatMessagesOverMaxLength: migrating ================
-- table_exists?(:chat_messages)
-> 0.0004s
-- execute("UPDATE chat_messages\nSET message = LEFT(message, 6000), cooked_version = NULL\nWHERE LENGTH(message) > 6000\n")
-> 0.0003s
== 20221117052348 TruncateChatMessagesOverMaxLength: migrated (0.0012s) =======
== 20221117142910 DeleteOrphanedChannels: migrating ===========================
== 20221117142910 DeleteOrphanedChannels: migrated (0.0007s) ==================
== 20221118104708 AddAllowChannelWideMentionsToChatChannels: migrating ========
-- add_column(:chat_channels, :allow_channel_wide_mentions, :boolean, {:null=>false, :default=>true})
-> 0.0009s
== 20221118104708 AddAllowChannelWideMentionsToChatChannels: migrated (0.0013s)
== 20221122070108 SaveChatAllowedGroupsSiteSetting: migrating =================
== 20221122070108 SaveChatAllowedGroupsSiteSetting: migrated (0.0006s) ========
== 20221125001635 AddBccAddressesToEmailLog: migrating ========================
-- add_column(:email_logs, :bcc_addresses, :text, {:null=>true})
-> 0.0004s
== 20221125001635 AddBccAddressesToEmailLog: migrated (0.0007s) ===============
== 20221125173217 RemoveEnableWhispersSiteSetting: migrating ==================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nSELECT 'whispers_allowed_groups', '20', '3', created_at, NOW()\nFROM site_settings\nWHERE name = 'enable_whispers' AND value = 't'\nON CONFLICT DO NOTHING\n")
-> 0.0003s
-- execute("UPDATE site_settings\nSET value = array_to_string(array_append(string_to_array(value, '|'), '3'), '|')\nWHERE name = 'whispers_allowed_groups' AND\n EXISTS(SELECT 1 FROM site_settings WHERE name = 'enable_whispers' AND value = 't') AND\n NOT '3' = ANY(string_to_array(value, '|'))\n")
-> 0.0003s
-- execute("UPDATE site_settings\nSET value = ''\nWHERE name = 'whispers_allowed_groups' AND\n NOT EXISTS(SELECT 1 FROM site_settings WHERE name = 'enable_whispers' AND value = 't')\n")
-> 0.0002s
-- execute("DELETE FROM site_settings WHERE name = 'enable_whispers'\n")
-> 0.0002s
== 20221125173217 RemoveEnableWhispersSiteSetting: migrated (0.0014s) =========
== 20221201024458 MakeChannelSlugsUniqueWithIndex: migrating ==================
== 20221201024458 MakeChannelSlugsUniqueWithIndex: migrated (0.0021s) =========
== 20221201032830 DropTmpChatSlugTables: migrating ============================
== 20221201032830 DropTmpChatSlugTables: migrated (0.0008s) ===================
== 20221201035918 AddSlugUniqueIndexForChatChannels: migrating ================
-- remove_index(:chat_channels, :slug)
-> 0.0024s
-- add_index(:chat_channels, :slug, {:unique=>true, :name=>"index_chat_channels_on_slug"})
-> 0.0036s
== 20221201035918 AddSlugUniqueIndexForChatChannels: migrated (0.0065s) =======
== 20221202032006 AddChatMessageCountToChatChannels: migrating ================
-- add_column(:chat_channels, :messages_count, :integer, {:null=>false, :default=>0})
-> 0.0008s
-- add_index(:chat_channels, :messages_count, {:name=>"index_chat_channels_on_messages_count"})
-> 0.0029s
== 20221202032006 AddChatMessageCountToChatChannels: migrated (0.0043s) =======
== 20221202043755 UpdateChatChannelMessageCounts: migrating ===================
== 20221202043755 UpdateChatChannelMessageCounts: migrated (0.0010s) ==========
== 20221205225450 MigrateSidebarSiteSettings: migrating =======================
== 20221205225450 MigrateSidebarSiteSettings: migrated (0.0006s) ==============
== 20221211142629 RemoveUpdatedTranslationOverrides: migrating ================
-- execute("DELETE\nFROM translation_overrides\nWHERE translation_key IN (\n 'js.user.messages.read_more_group_pm_MF',\n 'js.user.messages.read_more_personal_pm_MF',\n 'js.topic.read_more_MF',\n 'js.topic.bumped_at_title_MF',\n 'js.topic.read_more_in_category',\n 'js.topic.read_more'\n)\n")
-> 0.0002s
== 20221211142629 RemoveUpdatedTranslationOverrides: migrated (0.0005s) =======
== 20221212234948 DropTopicAllowedUsersBackupNov2022: migrating ===============
== 20221212234948 DropTopicAllowedUsersBackupNov2022: migrated (0.0006s) ======
== 20230103004613 MakeExperimentalHashtagFeatureDefaultForNewSites: migrating =
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nVALUES ('enable_experimental_hashtag_autocomplete', 5, 'f', now(), now())\nON CONFLICT DO NOTHING\n")
-> 0.0003s
== 20230103004613 MakeExperimentalHashtagFeatureDefaultForNewSites: migrated (0.0012s)
== 20230104054425 RenameRateLimitSearchAnon: migrating ========================
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'rate_limit_search_anon_user_per_minute', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'rate_limit_search_anon_user'\n")
-> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'rate_limit_search_anon_global_per_minute', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'rate_limit_search_anon_global'\n")
-> 0.0002s
== 20230104054425 RenameRateLimitSearchAnon: migrated (0.0008s) ===============
== 20230104054426 DeleteOldRateLimitSearchAnon: migrating =====================
-- execute("DELETE FROM site_settings WHERE name in ('rate_limit_search_anon_user', 'rate_limit_search_anon_global')")
-> 0.0002s
== 20230104054426 DeleteOldRateLimitSearchAnon: migrated (0.0005s) ============
== 20230105153520 TriggerPostRebakeLocalOneboxXss: migrating ==================
== 20230105153520 TriggerPostRebakeLocalOneboxXss: migrated (0.0004s) =========
== 20230111223803 DeleteMisconfiguredEmbeddableHosts: migrating ===============
-- execute("DELETE FROM embeddable_hosts eh1\nWHERE eh1.id IN (\n SELECT eh2.id FROM embeddable_hosts eh2\n LEFT JOIN categories ON categories.id = eh2.category_id\n WHERE eh2.category_id IS NOT NULL\n AND categories.id IS NULL\n)\n")
-> 0.0006s
== 20230111223803 DeleteMisconfiguredEmbeddableHosts: migrated (0.0009s) ======
== 20230113002617 ReindexInvalidIndexes: migrating ============================
== 20230113002617 ReindexInvalidIndexes: migrated (0.0011s) ===================
== 20230115233416 CreateSidebarSections: migrating ============================
-- create_table(:sidebar_sections)
-> 0.0061s
-- add_index(:sidebar_sections, [:user_id, :title], {:unique=>true, :name=>"index_sidebar_sections_on_user_id_and_title"})
-> 0.0024s
== 20230115233416 CreateSidebarSections: migrated (0.0090s) ===================
== 20230116090324 DropChatDraftsOverMaxLength: migrating ======================
-- table_exists?(:chat_drafts)
-> 0.0005s
-- execute("DELETE FROM chat_drafts\nWHERE LENGTH(data) > 50000\n")
-> 0.0003s
== 20230116090324 DropChatDraftsOverMaxLength: migrated (0.0012s) =============
== 20230117002110 CreateSidebarUrl: migrating =================================
-- create_table(:sidebar_urls)
-> 0.0057s
== 20230117002110 CreateSidebarUrl: migrated (0.0063s) ========================
== 20230117143451 DropInvalidDrafts: migrating ================================
-- execute("DELETE FROM drafts\nWHERE LENGTH(data) > 400000\n")
-> 0.0003s
== 20230117143451 DropInvalidDrafts: migrated (0.0006s) =======================
== 20230118020114 AddPublicTopicCountToTags: migrating ========================
-- add_column(:tags, :public_topic_count, :integer, {:default=>0, :null=>false})
-> 0.0007s
-- execute("UPDATE tags t\nSET public_topic_count = x.topic_count\nFROM (\n SELECT\n COUNT(topics.id) AS topic_count,\n tags.id AS tag_id\n FROM tags\n INNER JOIN topic_tags ON tags.id = topic_tags.tag_id\n INNER JOIN topics ON topics.id = topic_tags.topic_id AND topics.deleted_at IS NULL AND topics.archetype != 'private_message'\n INNER JOIN categories ON categories.id = topics.category_id AND NOT categories.read_restricted\n GROUP BY tags.id\n) x\nWHERE x.tag_id = t.id\nAND x.topic_count <> t.public_topic_count;\n")
-> 0.0014s
== 20230118020114 AddPublicTopicCountToTags: migrated (0.0026s) ===============
== 20230118042740 AddSidebarSectionIdToSidebarSectionLinks: migrating =========
-- add_column(:sidebar_section_links, :sidebar_section_id, :integer, {:index=>true})
-> 0.0004s
== 20230118042740 AddSidebarSectionIdToSidebarSectionLinks: migrated (0.0007s)
== 20230119000943 AddStaffTopicCountToTags: migrating =========================
-- add_column(:tags, :staff_topic_count, :integer, {:default=>0, :null=>false})
-> 0.0006s
-- execute("UPDATE tags t\nSET staff_topic_count = x.topic_count\nFROM (\n SELECT COUNT(topics.id) AS topic_count, tags.id AS tag_id\n FROM tags\n LEFT JOIN topic_tags ON tags.id = topic_tags.tag_id\n LEFT JOIN topics ON topics.id = topic_tags.topic_id\n AND topics.deleted_at IS NULL\n AND topics.archetype != 'private_message'\n GROUP BY tags.id\n) x\nWHERE x.tag_id = t.id\nAND x.topic_count <> t.staff_topic_count\n")
-> 0.0006s
== 20230119000943 AddStaffTopicCountToTags: migrated (0.0016s) ================
== 20230119024157 RemoveTopicCountFromTags: migrating =========================
== 20230119024157 RemoveTopicCountFromTags: migrated (0.0015s) ================
== 20230119091939 DropOrphanedReviewableFlaggedPosts: migrating ===============
== 20230119091939 DropOrphanedReviewableFlaggedPosts: migrated (0.0006s) ======
== 20230119094939 RemoveWildcardFromEmailDomainSiteSettings: migrating ========
-- execute("UPDATE site_settings\nSET value = regexp_replace(value, '\\*(\\.)?|\\?', '', 'g')\nWHERE name IN (\n 'auto_approve_email_domains',\n 'allowed_email_domains',\n 'blocked_email_domains'\n)\n")
-> 0.0002s
== 20230119094939 RemoveWildcardFromEmailDomainSiteSettings: migrated (0.0005s)
== 20230123020036 MoveChatUploadsToUploadReferences: migrating ================
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT chat_uploads.upload_id, 'ChatMessage', chat_uploads.chat_message_id, chat_uploads.created_at, chat_uploads.updated_at\nFROM chat_uploads\nINNER JOIN uploads ON uploads.id = chat_uploads.upload_id\nON CONFLICT DO NOTHING\n")
-> 0.0005s
== 20230123020036 MoveChatUploadsToUploadReferences: migrated (0.0009s) =======
== 20230123025112 MoveChatUploadsToUploadReferencesPost: migrating ============
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT chat_uploads.upload_id, 'ChatMessage', chat_uploads.chat_message_id, chat_uploads.created_at, chat_uploads.updated_at\nFROM chat_uploads\nINNER JOIN uploads ON uploads.id = chat_uploads.upload_id\nON CONFLICT DO NOTHING\n")
-> 0.0003s
== 20230123025112 MoveChatUploadsToUploadReferencesPost: migrated (0.0006s) ===
== 20230127173249 TruncateUserStatusTo100Characters: migrating ================
-- execute("UPDATE user_statuses SET description = left(description, 100)")
-> 0.0003s
-- execute("UPDATE user_statuses SET emoji = left(emoji, 100)")
-> 0.0001s
== 20230127173249 TruncateUserStatusTo100Characters: migrated (0.0007s) =======
== 20230130053144 AddThreadingEnabledToChatChannels: migrating ================
-- add_column(:chat_channels, :threading_enabled, :boolean, {:default=>false, :null=>false})
-> 0.0007s
== 20230130053144 AddThreadingEnabledToChatChannels: migrated (0.0011s) =======
== 20230201012734 CreateChatThreadingModels: migrating ========================
-- create_table(:chat_threads)
-> 0.0065s
-- add_index(:chat_threads, :channel_id, {:name=>"index_chat_threads_on_channel_id"})
-> 0.0024s
-- add_index(:chat_threads, :original_message_id, {:name=>"index_chat_threads_on_original_message_id"})
-> 0.0024s
-- add_index(:chat_threads, :original_message_user_id, {:name=>"index_chat_threads_on_original_message_user_id"})
-> 0.0023s
-- add_index(:chat_threads, :status, {:name=>"index_chat_threads_on_status"})
-> 0.0023s
-- add_index(:chat_threads, [:channel_id, :status], {:name=>"index_chat_threads_on_channel_id_and_status"})
-> 0.0025s
-- add_column(:chat_messages, :thread_id, :bigint, {:null=>true})
-> 0.0004s
-- add_index(:chat_messages, :thread_id, {:name=>"index_chat_messages_on_thread_id"})
-> 0.0024s
== 20230201012734 CreateChatThreadingModels: migrated (0.0220s) ===============
== 20230201192925 AddTrigramIndexesToUsers: migrating =========================
-- add_index(:users, :username_lower, {:using=>"gist", :opclass=>:gist_trgm_ops, :algorithm=>:concurrently, :name=>"index_users_on_username_lower_trgm"})
-> 0.0019s
-- add_index(:users, :name, {:using=>"gist", :opclass=>:gist_trgm_ops, :algorithm=>:concurrently, :name=>"index_users_on_name_trgm"})
-> 0.0009s
== 20230201192925 AddTrigramIndexesToUsers: migrated (0.0034s) ================
== 20230202021414 RemoveEnableNewUserProfileNavGroupsSiteSettings: migrating ==
-- execute("DELETE FROM site_settings WHERE name = 'enable_new_user_profile_nav_groups'")
-> 0.0002s
== 20230202021414 RemoveEnableNewUserProfileNavGroupsSiteSettings: migrated (0.0006s)
== 20230202173641 CreateFormTemplates: migrating ==============================
-- create_table(:form_templates)
-> 0.0058s
-- add_index(:form_templates, :name, {:unique=>true, :name=>"index_form_templates_on_name"})
-> 0.0023s
== 20230202173641 CreateFormTemplates: migrated (0.0086s) =====================
== 20230202204937 AddIndexToPostsWhereNotDeletedOrEmpty: migrating ============
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_posts_on_id_topic_id_where_not_deleted_or_empty\n")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY index_posts_on_id_topic_id_where_not_deleted_or_empty ON posts (id, topic_id) where deleted_at IS NULL AND raw <> ''\n")
-> 0.0034s
== 20230202204937 AddIndexToPostsWhereNotDeletedOrEmpty: migrated (0.0041s) ===
== 20230206033907 AddIconToSidebarUrls: migrating =============================
-- add_column(:sidebar_urls, :icon, :string)
-> 0.0004s
== 20230206033907 AddIconToSidebarUrls: migrated (0.0008s) ====================
== 20230207042719 AddLimitsToSidebarSectionsAndSidebarUrls: migrating =========
-- execute("UPDATE sidebar_urls SET icon = 'link' WHERE icon IS NULL")
-> 0.0004s
-- change_column(:sidebar_sections, :title, :string, {:limit=>30, :null=>false})
-> 0.0054s
-- change_column(:sidebar_urls, :icon, :string, {:limit=>40, :null=>false})
-> 0.0051s
-- change_column(:sidebar_urls, :name, :string, {:limit=>80, :null=>false})
-> 0.0049s
-- change_column(:sidebar_urls, :value, :string, {:limit=>200, :null=>false})
-> 0.0030s
== 20230207042719 AddLimitsToSidebarSectionsAndSidebarUrls: migrated (0.0195s)
== 20230207093514 CreateCategorySettings: migrating ===========================
-- create_table(:category_settings)
-> 0.0066s
== 20230207093514 CreateCategorySettings: migrated (0.0072s) ==================
== 20230208020404 PopulateCategorySettings: migrating =========================
-- execute("INSERT INTO\n category_settings(\n category_id,\n require_topic_approval,\n require_reply_approval,\n num_auto_bump_daily,\n created_at,\n updated_at\n )\nSELECT\n category_id,\n MAX(\n CASE WHEN (name = 'require_topic_approval')\n THEN NULLIF(value, '') ELSE NULL END\n )::boolean AS require_topic_approval,\n MAX(\n CASE WHEN (name = 'require_reply_approval')\n THEN NULLIF(value, '') ELSE NULL END\n )::boolean AS require_reply_approval,\n MAX(\n CASE WHEN (name = 'num_auto_bump_daily')\n THEN NULLIF(value, '') ELSE NULL END\n )::integer AS num_auto_bump_daily,\n NOW() AS created_at,\n NOW() AS updated_at\nFROM category_custom_fields\nWHERE name IN (\n 'require_topic_approval',\n 'require_reply_approval',\n 'num_auto_bump_daily'\n)\nGROUP BY category_id;\n")
-> 0.0008s
== 20230208020404 PopulateCategorySettings: migrated (0.0013s) ================
== 20230209222225 AddLinkableIndexToSidebarSectionLinks: migrating ============
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_sidebar_section_links_on_linkable_type_and_linkable_id\n")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY index_sidebar_section_links_on_linkable_type_and_linkable_id\nON sidebar_section_links (linkable_type,linkable_id)\n")
-> 0.0031s
== 20230209222225 AddLinkableIndexToSidebarSectionLinks: migrated (0.0039s) ===
== 20230213234415 CreateCategoryFormTemplates: migrating ======================
-- create_table(:category_form_templates)
-> 0.0088s
== 20230213234415 CreateCategoryFormTemplates: migrated (0.0094s) =============
== 20230214044350 AddPublicToSidebarSections: migrating =======================
-- add_column(:sidebar_sections, :public, :boolean, {:null=>false, :default=>false})
-> 0.0008s
== 20230214044350 AddPublicToSidebarSections: migrated (0.0012s) ==============
== 20230224193734 CreateThemeSvgSprite: migrating =============================
-- create_table(:theme_svg_sprites)
-> 0.0063s
-- add_index(:theme_svg_sprites, :theme_id, {:unique=>true, :name=>"index_theme_svg_sprites_on_theme_id"})
-> 0.0026s
== 20230224193734 CreateThemeSvgSprite: migrated (0.0096s) ====================
== 20230224225129 BackfillSvgSprites: migrating ===============================
== 20230224225129 BackfillSvgSprites: migrated (0.0160s) ======================
== 20230227050146 UpdateNarrativeBadgeIcons: migrating ========================
-- execute("UPDATE badges\nSET icon = 'stamp'\nWHERE\n name IN ('Certified', 'Licensed')\n AND icon = 'fa-certificate'\n")
-> 0.0005s
== 20230227050146 UpdateNarrativeBadgeIcons: migrated (0.0025s) ===============
== 20230227050147 UpdateBadgeIcons: migrating =================================
-- execute("UPDATE badges SET icon = 'book-reader' WHERE id IN (17) AND icon = 'fa-certificate'")
-> 0.0005s
-- execute("UPDATE badges SET icon = 'file-alt' WHERE id IN (16) AND icon = 'fa-certificate'")
-> 0.0002s
-- execute("UPDATE badges SET icon = 'link' WHERE id IN (14,28,29,30) AND icon = 'fa-certificate'")
-> 0.0002s
-- execute("UPDATE badges SET icon = 'quote-right' WHERE id IN (15) AND icon = 'fa-certificate'")
-> 0.0002s
-- execute("UPDATE badges SET icon = 'heart' WHERE id IN (11,5) AND icon = 'fa-certificate'")
-> 0.0002s
-- execute("UPDATE badges SET icon = 'flag' WHERE id IN (13) AND icon = 'fa-certificate'")
-> 0.0001s
-- execute("UPDATE badges SET icon = 'share-alt' WHERE id IN (12,21,22,23) AND icon = 'fa-certificate'")
-> 0.0002s
-- execute("UPDATE badges SET icon = 'user-edit' WHERE id IN (9) AND icon = 'fa-certificate'")
-> 0.0001s
-- execute("UPDATE badges SET icon = 'pen' WHERE id IN (10) AND icon = 'fa-certificate'")
-> 0.0001s
-- execute("UPDATE badges SET icon = 'far-edit' WHERE id IN (48) AND icon = 'fa-certificate'")
-> 0.0001s
-- execute("UPDATE badges SET icon = 'reply' WHERE id IN (6,7,8) AND icon = 'fa-certificate'")
-> 0.0003s
-- execute("UPDATE badges SET icon = 'file-signature' WHERE id IN (18,19,20) AND icon = 'fa-certificate'")
-> 0.0002s
-- execute("UPDATE badges SET icon = 'at' WHERE id IN (40) AND icon = 'fa-certificate'")
-> 0.0002s
-- execute("UPDATE badges SET icon = 'smile' WHERE id IN (41) AND icon = 'fa-certificate'")
-> 0.0001s
-- execute("UPDATE badges SET icon = 'cube' WHERE id IN (42) AND icon = 'fa-certificate'")
-> 0.0002s
-- execute("UPDATE badges SET icon = 'envelope' WHERE id IN (43) AND icon = 'fa-certificate'")
-> 0.0001s
-- execute("UPDATE badges SET icon = 'medal' WHERE id IN (44) AND icon = 'fa-certificate'")
-> 0.0001s
-- execute("UPDATE badges SET icon = 'birthday-cake' WHERE id IN (24) AND icon = 'far-clock'")
-> 0.0002s
== 20230227050147 UpdateBadgeIcons: migrated (0.0073s) ========================
== 20230227172543 MakeChatMentionNotificationIdNullable: migrating ============
-- change_column_null(:chat_mentions, :notification_id, true, nil)
-> 0.0003s
== 20230227172543 MakeChatMentionNotificationIdNullable: migrated (0.0008s) ===
== 20230228062442 AddChatHeaderIndicatorPreference: migrating =================
-- add_column(:user_options, :chat_header_indicator_preference, :integer, {:default=>0, :null=>false})
-> 0.0008s
== 20230228062442 AddChatHeaderIndicatorPreference: migrated (0.0012s) ========
== 20230228105851 DropBadgeGrantedTitleColumn: migrating ======================
== 20230228105851 DropBadgeGrantedTitleColumn: migrated (0.0017s) =============
== 20230301071240 AddAutoBumpCooldownDaysToCategorySettings: migrating ========
-- add_column(:category_settings, :auto_bump_cooldown_days, :integer, {:default=>1})
-> 0.0006s
== 20230301071240 AddAutoBumpCooldownDaysToCategorySettings: migrated (0.0011s)
== 20230303015952 AddExternalToSidebarUrls: migrating =========================
-- add_column(:sidebar_urls, :external, :boolean, {:default=>false, :null=>false})
-> 0.0007s
== 20230303015952 AddExternalToSidebarUrls: migrated (0.0011s) ================
== 20230307051200 AddPositionToSidebarSectionLinks: migrating =================
-- add_column(:sidebar_section_links, :position, :integer, {:default=>0, :null=>false})
-> 0.0006s
-- execute("UPDATE sidebar_section_links SET position = id")
-> 0.0004s
-- add_index(:sidebar_section_links, [:user_id, :sidebar_section_id, :position], {:unique=>true, :name=>"links_user_id_section_id_position"})
-> 0.0033s
== 20230307051200 AddPositionToSidebarSectionLinks: migrated (0.0049s) ========
== 20230308042434 BackfillAutoBumpCooldownDaysCategorySetting: migrating ======
-- execute("INSERT INTO\n category_settings(\n category_id,\n auto_bump_cooldown_days,\n created_at,\n updated_at\n )\nSELECT\n id,\n 1,\n NOW(),\n NOW()\nFROM categories\nON CONFLICT (category_id)\nDO\n UPDATE SET\n auto_bump_cooldown_days = 1,\n updated_at = NOW();\n")
-> 0.0008s
== 20230308042434 BackfillAutoBumpCooldownDaysCategorySetting: migrated (0.0013s)
== 20230317194217 RebakeLazyYtPosts: migrating ================================
-- execute("UPDATE posts SET baked_version = 0\nWHERE cooked LIKE '%lazyYT-container%'\n")
-> 0.0019s
== 20230317194217 RebakeLazyYtPosts: migrated (0.0024s) =======================
== 20230328034956 AddSidebarSectionIdIndexToSidebarSectionLink: migrating =====
-- execute("DROP INDEX CONCURRENTLY IF EXISTS idx_sidebar_section_links_on_sidebar_section_id\n")
-> 0.0002s
-- execute("CREATE UNIQUE INDEX CONCURRENTLY idx_sidebar_section_links_on_sidebar_section_id\nON sidebar_section_links (sidebar_section_id, user_id, position)\n")
-> 0.0030s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS links_user_id_section_id_position\n")
-> 0.0042s
== 20230328034956 AddSidebarSectionIdIndexToSidebarSectionLink: migrated (0.0081s)
== 20230403012844 DropChatUploads: migrating ==================================
== 20230403012844 DropChatUploads: migrated (0.0016s) =========================
== 20230403063113 DropIdxPostCustomFieldsAkismet: migrating ===================
-- execute("DROP INDEX IF EXISTS idx_post_custom_fields_akismet")
-> 0.0004s
== 20230403063113 DropIdxPostCustomFieldsAkismet: migrated (0.0009s) ==========
== 20230403094936 ChangeGoogleAnalyticsDefault: migrating =====================
== 20230403094936 ChangeGoogleAnalyticsDefault: migrated (0.0013s) ============
== 20230404064728 SystemUserForPublicSections: migrating ======================
-- execute(" UPDATE sidebar_sections\n SET user_id = -1\n WHERE public IS TRUE\n")
-> 0.0004s
-- execute(" UPDATE sidebar_section_links\n SET user_id = -1\n FROM sidebar_sections\n WHERE sidebar_sections.public IS TRUE\n AND sidebar_section_links.sidebar_section_id = sidebar_sections.id\n")
-> 0.0004s
== 20230404064728 SystemUserForPublicSections: migrated (0.0012s) =============
== 20230405121453 AddPasswordAlgorithmToUsers: migrating ======================
-- column_exists?(:users, :password_algorithm)
-> 0.0023s
-- add_column(:users, :password_algorithm, :string, {:limit=>64})
-> 0.0005s
-- execute("UPDATE users SET password_algorithm = '$pbkdf2-sha256$i=64000,l=32$'\nWHERE id IN (\n SELECT id FROM users\n WHERE users.password_hash IS NOT NULL\n AND users.password_algorithm IS NULL\n LIMIT 5000\n)\n")
-> 0.0038s
== 20230405121453 AddPasswordAlgorithmToUsers: migrated (0.0072s) =============
== 20230405121454 UpdatePasswordAlgorithmPostDeploy: migrating ================
-- execute("UPDATE users SET password_algorithm = '$pbkdf2-sha256$i=64000,l=32$'\nWHERE users.password_algorithm IS NULL\nAND users.password_hash IS NOT NULL\n")
-> 0.0003s
== 20230405121454 UpdatePasswordAlgorithmPostDeploy: migrated (0.0007s) =======
== 20230411012630 AddThreadNotDeletedIndexChatMessages: migrating =============
-- execute("DROP INDEX IF EXISTS idx_chat_messages_by_thread_id_not_deleted\n")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS\nidx_chat_messages_by_thread_id_not_deleted\nON chat_messages (thread_id)\nWHERE deleted_at IS NULL\n")
-> 0.0031s
== 20230411012630 AddThreadNotDeletedIndexChatMessages: migrated (0.0037s) ====
== 20230411023246 AddChatMessageRepliesCountToChatThreads: migrating ==========
-- add_column(:chat_threads, :replies_count, :integer, {:null=>false, :default=>0})
-> 0.0006s
-- add_index(:chat_threads, :replies_count, {:name=>"index_chat_threads_on_replies_count"})
-> 0.0026s
== 20230411023246 AddChatMessageRepliesCountToChatThreads: migrated (0.0037s) =
== 20230411023340 UpdateThreadReplyCounts: migrating ==========================
== 20230411023340 UpdateThreadReplyCounts: migrated (0.0013s) =================
== 20230411031428 AddSegmentToSidebarUrls: migrating ==========================
-- add_column(:sidebar_urls, :segment, :integer, {:default=>0, :null=>false})
-> 0.0006s
== 20230411031428 AddSegmentToSidebarUrls: migrated (0.0010s) =================
== 20230411031520 AddSectionTypeToSidebarSections: migrating ==================
-- add_column(:sidebar_sections, :section_type, :integer)
-> 0.0003s
-- add_index(:sidebar_sections, :section_type, {:unique=>true, :name=>"index_sidebar_sections_on_section_type"})
-> 0.0026s
== 20230411031520 AddSectionTypeToSidebarSections: migrated (0.0034s) =========
== 20230411032053 InsertCommunityToSidebarSections: migrating =================
== 20230411032053 InsertCommunityToSidebarSections: migrated (0.0021s) ========
== 20230412120414 AddPrefersEncryptFieldToPendingPms: migrating ===============
-- add_column(:discourse_automation_pending_pms, :prefers_encrypt, :boolean, {:default=>false})
-> 0.0005s
-- execute("UPDATE discourse_automation_pending_pms\nSET prefers_encrypt = false\n")
-> 0.0003s
-- change_column_null(:discourse_automation_pending_pms, :prefers_encrypt, false, nil)
-> 0.0002s
== 20230412120414 AddPrefersEncryptFieldToPendingPms: migrated (0.0013s) ======
== 20230413121500 AddDiscourseConnectAllowedRedirectDomainsToSiteSettings: migrating
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_allowed_redirect_domains', 8, '*', created_at, NOW()\nFROM site_settings\nWHERE name = 'discourse_connect_allows_all_return_paths' AND value = 't'\n")
-> 0.0002s
-- execute("DELETE FROM site_settings\nWHERE name = 'discourse_connect_allows_all_return_paths'\n")
-> 0.0001s
== 20230413121500 AddDiscourseConnectAllowedRedirectDomainsToSiteSettings: migrated (0.0007s)
== 20230419001801 RemoveEnableCustomSidebarSectionsSetting: migrating =========
-- execute("DELETE FROM site_settings WHERE name = 'enable_custom_sidebar_sections'")
-> 0.0002s
== 20230419001801 RemoveEnableCustomSidebarSectionsSetting: migrated (0.0005s)
== 20230501022508 RenameNotifyAboutFlagsAfterSiteSetting: migrating ===========
-- execute("UPDATE site_settings SET name = 'notify_about_reviewable_item_after' WHERE name = 'notify_about_flags_after'")
-> 0.0002s
== 20230501022508 RenameNotifyAboutFlagsAfterSiteSetting: migrated (0.0005s) ==
== 20230505113906 HideUserTipsForExistingUsers: migrating =====================
-- execute("UPDATE user_options SET seen_popups = '{1, 2, 3, 4, 5}'")
-> 0.0014s
== 20230505113906 HideUserTipsForExistingUsers: migrated (0.0017s) ============
== 20230509214723 SeparateTrustedUsersCanEditOthersSiteSetting: migrating =====
-- select_value("SELECT 1 FROM site_settings WHERE name = 'trusted_users_can_edit_others' AND value = 'f'")
-> 0.0003s
== 20230509214723 SeparateTrustedUsersCanEditOthersSiteSetting: migrated (0.0006s)
== 20230510142249 AddUserChatThreadMemberships: migrating =====================
-- create_table(:user_chat_thread_memberships)
-> 0.0042s
-- add_index(:user_chat_thread_memberships, [:user_id, :thread_id], {:unique=>true, :name=>"user_chat_thread_unique_memberships"})
-> 0.0024s
== 20230510142249 AddUserChatThreadMemberships: migrated (0.0071s) ============
== 20230515103515 CreateWatchedWordGroups: migrating ==========================
-- create_table(:watched_word_groups)
-> 0.0035s
== 20230515103515 CreateWatchedWordGroups: migrated (0.0040s) =================
== 20230515131111 AddWatchedWordGroupIdToWatchedWords: migrating ==============
-- add_column(:watched_words, :watched_word_group_id, :bigint)
-> 0.0004s
-- add_index(:watched_words, :watched_word_group_id, {:name=>"index_watched_words_on_watched_word_group_id"})
-> 0.0024s
== 20230515131111 AddWatchedWordGroupIdToWatchedWords: migrated (0.0033s) =====
== 20230523073109 DeleteOldPersonalMessageSettings: migrating =================
-- execute("DELETE FROM site_settings WHERE name = 'enable_personal_messages'\n")
-> 0.0002s
-- execute("DELETE FROM site_settings WHERE name = 'min_trust_to_send_messages'\n")
-> 0.0001s
== 20230523073109 DeleteOldPersonalMessageSettings: migrated (0.0007s) ========
== 20230528134326 EnableExperimentalHashtagAutocompleteTrueForAllSites: migrating
== 20230528134326 EnableExperimentalHashtagAutocompleteTrueForAllSites: migrated (0.0004s)
== 20230602034711 RenameEverythingToTopicsLink: migrating =====================
== 20230602034711 RenameEverythingToTopicsLink: migrated (0.0010s) ============
== 20230607091233 BackfillThreadMemberships: migrating ========================
-- execute("INSERT INTO user_chat_thread_memberships(\n user_id,\n thread_id,\n notification_level,\n last_read_message_id,\n created_at,\n updated_at\n)\nSELECT\n thread_participant_stats.user_id,\n thread_participant_stats.thread_id,\n 2,\n (\n SELECT id FROM chat_messages\n WHERE thread_id = thread_participant_stats.thread_id\n AND deleted_at IS NULL\n ORDER BY created_at DESC, id DESC\n LIMIT 1\n ),\n NOW(),\n NOW()\nFROM (\n SELECT chat_messages.thread_id, chat_messages.user_id\n FROM chat_messages\n INNER JOIN chat_threads ON chat_threads.id = chat_messages.thread_id\n WHERE chat_messages.thread_id IS NOT NULL\n GROUP BY chat_messages.thread_id, chat_messages.user_id\n ORDER BY chat_messages.thread_id ASC, chat_messages.user_id ASC\n) AS thread_participant_stats\nINNER JOIN users ON users.id = thread_participant_stats.user_id\nLEFT JOIN user_chat_thread_memberships ON user_chat_thread_memberships.thread_id = thread_participant_stats.thread_id\n AND user_chat_thread_memberships.user_id = thread_participant_stats.user_id\nWHERE user_chat_thread_memberships IS NULL\nORDER BY user_chat_thread_memberships.thread_id ASC\nON CONFLICT DO NOTHING;\n")
-> 0.0009s
== 20230607091233 BackfillThreadMemberships: migrated (0.0013s) ===============
== 20230608163854 CreateSummarySectionsTable: migrating =======================
-- create_table(:summary_sections)
-> 0.0060s
== 20230608163854 CreateSummarySectionsTable: migrated (0.0064s) ==============
== 20230612134421 RemoveOldPollsDataFromCustomFields: migrating ===============
-- execute("DELETE FROM post_custom_fields\nWHERE name LIKE 'polls%'\n")
-> 0.0004s
== 20230612134421 RemoveOldPollsDataFromCustomFields: migrated (0.0007s) ======
== 20230614011312 RenameDefaultSidebarCategoriesSetting: migrating ============
-- execute("UPDATE site_settings SET name = 'default_navigation_menu_categories' WHERE name = 'default_sidebar_categories'")
-> 0.0002s
== 20230614011312 RenameDefaultSidebarCategoriesSetting: migrated (0.0005s) ===
== 20230614011419 RenameDefaultSidebarTagsSetting: migrating ==================
-- execute("UPDATE site_settings SET name = 'default_navigation_menu_tags' WHERE name = 'default_sidebar_tags'")
-> 0.0003s
== 20230614011419 RenameDefaultSidebarTagsSetting: migrated (0.0007s) =========
== 20230614041219 DeleteDuplicatePollVotes: migrating =========================
-- execute("DELETE FROM poll_votes\nWHERE (poll_id, user_id, poll_option_id) IN (\n SELECT pv.poll_id, pv.user_id, pv.poll_option_id\n FROM poll_votes pv\n JOIN polls p ON pv.poll_id = p.id\n WHERE p.type = 0\n AND EXISTS (\n SELECT 1\n FROM poll_votes pv2\n WHERE pv.poll_id = pv2.poll_id\n AND pv.user_id = pv2.user_id\n AND pv.created_at < pv2.created_at\n )\n);\n")
-> 0.0012s
== 20230614041219 DeleteDuplicatePollVotes: migrated (0.0016s) ================
== 20230618041001 AddSidebarLinkToFilteredListToUserOption: migrating =========
-- add_column(:user_options, :sidebar_link_to_filtered_list, :boolean, {:default=>false, :null=>false})
-> 0.0007s
-- execute("UPDATE user_options\nSET sidebar_link_to_filtered_list = true\nWHERE sidebar_list_destination = 1\n")
-> 0.0003s
== 20230618041001 AddSidebarLinkToFilteredListToUserOption: migrated (0.0015s)
== 20230618041123 AddSidebarShowCountOfNewItemsToUserOption: migrating ========
-- add_column(:user_options, :sidebar_show_count_of_new_items, :boolean, {:default=>false, :null=>false})
-> 0.0007s
-- execute("UPDATE user_options\nSET sidebar_show_count_of_new_items = true\nWHERE sidebar_list_destination = 1\n")
-> 0.0003s
== 20230618041123 AddSidebarShowCountOfNewItemsToUserOption: migrated (0.0013s)
== 20230620050614 RemoveDefaultSidebarListDestinationSetting: migrating =======
-- execute("DELETE FROM site_settings WHERE name = 'default_sidebar_list_destination'")
-> 0.0002s
== 20230620050614 RemoveDefaultSidebarListDestinationSetting: migrated (0.0005s)
== 20230627044755 AddLastViewedAtToUserChatChannelMemberships: migrating ======
-- add_column(:user_chat_channel_memberships, :last_viewed_at, :datetime, {:null=>false, :default=>#<Proc:0x0000fb5cd76b3868 /var/www/discourse/plugins/chat/db/migrate/20230627044755_add_last_viewed_at_to_user_chat_channel_memberships.rb:9 (lambda)>})
-> 0.0005s
== 20230627044755 AddLastViewedAtToUserChatChannelMemberships: migrated (0.0008s)
== 20230627060104 RemoveNewEditSidebarCategoriesTagsInterfaceGroupsSiteSetting: migrating
-- execute("DELETE FROM site_settings WHERE name = 'new_edit_sidebar_categories_tags_interface_groups'")
-> 0.0002s
== 20230627060104 RemoveNewEditSidebarCategoriesTagsInterfaceGroupsSiteSetting: migrated (0.0005s)
== 20230628062236 AddWatchedPrecedenceOverMutedToUserOptions: migrating =======
-- add_column(:user_options, :watched_precedence_over_muted, :boolean)
-> 0.0004s
== 20230628062236 AddWatchedPrecedenceOverMutedToUserOptions: migrated (0.0014s)
== 20230703035052 AddStatusToTranslationOverrides: migrating ==================
-- add_column(:translation_overrides, :original_translation, :text)
-> 0.0003s
-- add_column(:translation_overrides, :status, :integer, {:null=>false, :default=>0})
-> 0.0004s
== 20230703035052 AddStatusToTranslationOverrides: migrated (0.0012s) =========
== 20230707025733 AddLastMessageIdToChannelAndThread: migrating ===============
-- add_column(:chat_channels, :last_message_id, :bigint, {:null=>true})
-> 0.0003s
-- add_column(:chat_threads, :last_message_id, :bigint, {:null=>true})
-> 0.0003s
-- add_index(:chat_channels, :last_message_id, {:name=>"index_chat_channels_on_last_message_id"})
-> 0.0027s
-- add_index(:chat_threads, :last_message_id, {:name=>"index_chat_threads_on_last_message_id"})
-> 0.0023s
== 20230707025733 AddLastMessageIdToChannelAndThread: migrated (0.0062s) ======
== 20230707031122 AddWatchedPrecedenceOverMutedIndexToUserOptions: migrating ==
-- add_index(:user_options, :watched_precedence_over_muted, {:name=>"index_user_options_on_watched_precedence_over_muted"})
-> 0.0026s
== 20230707031122 AddWatchedPrecedenceOverMutedIndexToUserOptions: migrated (0.0031s)
== 20230707082645 BackfillChatChannelAndThreadLastMessageIds: migrating =======
-- execute(" UPDATE chat_channels\n SET last_message_id = (\n SELECT cm.id\n FROM chat_messages cm\n LEFT JOIN chat_threads ON chat_threads.original_message_id = cm.id\n WHERE cm.chat_channel_id = chat_channels.id\n AND cm.deleted_at IS NULL\n AND (cm.thread_id IS NULL OR chat_threads.id IS NOT NULL)\n ORDER BY cm.created_at DESC, cm.id DESC\n LIMIT 1\n );\n")
-> 0.0008s
-- execute(" UPDATE chat_threads\n SET last_message_id = (\n SELECT cm.id\n FROM chat_messages cm\n WHERE cm.thread_id = chat_threads.id\n AND cm.deleted_at IS NULL\n ORDER BY cm.created_at DESC, cm.id DESC\n LIMIT 1\n );\n")
-> 0.0003s
== 20230707082645 BackfillChatChannelAndThreadLastMessageIds: migrated (0.0015s)
== 20230708011310 FixReviewableQueuedPostsTargetCreatedById: migrating ========
-- execute("UPDATE reviewables\nSET target_created_by_id = created_by_id,\n created_by_id = -1\nWHERE type = 'ReviewableQueuedPost' AND target_created_by_id IS NULL\n")
-> 0.0004s
== 20230708011310 FixReviewableQueuedPostsTargetCreatedById: migrated (0.0007s)
-- execute(" UPDATE chat_channels\n SET last_message_id = (\n SELECT cm.id\n FROM chat_messages cm\n LEFT JOIN chat_threads ON chat_threads.original_message_id = cm.id\n WHERE cm.chat_channel_id = chat_channels.id\n AND cm.deleted_at IS NULL\n AND (cm.thread_id IS NULL OR chat_threads.id IS NOT NULL)\n ORDER BY cm.created_at DESC, cm.id DESC\n LIMIT 1\n );\n")
-> 0.0004s
-- execute(" UPDATE chat_threads\n SET last_message_id = (\n SELECT cm.id\n FROM chat_messages cm\n WHERE cm.thread_id = chat_threads.id\n AND cm.deleted_at IS NULL\n ORDER BY cm.created_at DESC, cm.id DESC\n LIMIT 1\n );\n")
-> 0.0003s
== 20230710040640 BackfillChatChannelAndThreadLastMessageIdsPostMigrate: migrating
== 20230710040640 BackfillChatChannelAndThreadLastMessageIdsPostMigrate: migrated (0.0003s)
== 20230712011946 AddTopicIdNotificationLevelIndexToTopicUsers: migrating =====
-- add_index(:topic_users, [:topic_id, :notification_level], {:name=>"index_topic_users_on_topic_id_and_notification_level"})
-> 0.0030s
== 20230712011946 AddTopicIdNotificationLevelIndexToTopicUsers: migrated (0.0040s)
== 20230712013248 AddCategoryIdNotificationLevelIndexToCategoryUsers: migrating
-- add_index(:category_users, [:category_id, :notification_level], {:name=>"index_category_users_on_category_id_and_notification_level"})
-> 0.0024s
== 20230712013248 AddCategoryIdNotificationLevelIndexToCategoryUsers: migrated (0.0029s)
== 20230721025249 RemoveExperimentalSiteSettingForThreads: migrating ==========
-- execute("DELETE FROM site_settings WHERE name='enable_experimental_chat_threaded_discussions'")
-> 0.0003s
== 20230721025249 RemoveExperimentalSiteSettingForThreads: migrated (0.0006s) =
== 20230722124044 AddChatSeparateSidebarModeUserOption: migrating =============
-- add_column(:user_options, :chat_separate_sidebar_mode, :integer, {:default=>0, :null=>false})
-> 0.0008s
== 20230722124044 AddChatSeparateSidebarModeUserOption: migrated (0.0012s) ====
== 20230727015030 AddIndexTopicIdCreatedAtOnPosts: migrating ==================
-- remove_index(:posts, [:topic_id, :created_at], {:algorithm=>:concurrently, :if_exists=>true})
-> 0.0042s
-- add_index(:posts, [:topic_id, :created_at], {:algorithm=>:concurrently, :name=>"index_posts_on_topic_id_and_created_at"})
-> 0.0034s
== 20230727015030 AddIndexTopicIdCreatedAtOnPosts: migrated (0.0081s) =========
== 20230727015254 ChangeCategorySettingNumAutoBumpDailyDefault: migrating =====
-- change_column_default(:category_settings, :num_auto_bump_daily, 0)
-> 0.0015s
-- execute("WITH custom_fields AS (\n SELECT\n category_id,\n MAX(\n CASE WHEN (name = 'require_topic_approval')\n THEN NULLIF(value, '') ELSE NULL END\n )::boolean AS require_topic_approval,\n MAX(\n CASE WHEN (name = 'require_reply_approval')\n THEN NULLIF(value, '') ELSE NULL END\n )::boolean AS require_reply_approval,\n MAX(\n CASE WHEN (name = 'num_auto_bump_daily')\n THEN NULLIF(value, '') ELSE NULL END\n )::integer AS num_auto_bump_daily,\n NOW() AS created_at,\n NOW() AS updated_at\n FROM category_custom_fields\n WHERE name IN (\n 'require_topic_approval',\n 'require_reply_approval',\n 'num_auto_bump_daily'\n )\n GROUP BY category_id\n)\nINSERT INTO\n category_settings(\n category_id,\n require_topic_approval,\n require_reply_approval,\n num_auto_bump_daily,\n created_at,\n updated_at\n )\nSELECT * FROM custom_fields\nON CONFLICT (category_id) DO\nUPDATE SET\n require_topic_approval = EXCLUDED.require_topic_approval,\n require_reply_approval = EXCLUDED.require_reply_approval,\n num_auto_bump_daily = EXCLUDED.num_auto_bump_daily,\n updated_at = NOW()\n")
-> 0.0005s
-- execute("UPDATE category_settings\nSET num_auto_bump_daily = 0\nWHERE num_auto_bump_daily IS NULL;\n")
-> 0.0003s
== 20230727015254 ChangeCategorySettingNumAutoBumpDailyDefault: migrated (0.0028s)
== 20230728055813 DeleteOrphanedDraftUploadReferences: migrating ==============
-- execute("DELETE\nFROM\n \"upload_references\"\nWHERE\n \"upload_references\".\"target_type\" = 'Draft' AND\n \"upload_references\".\"target_id\" NOT IN (\n SELECT \"drafts\".\"id\" FROM \"drafts\"\n )\n")
-> 0.0007s
== 20230728055813 DeleteOrphanedDraftUploadReferences: migrated (0.0011s) =====
== 20230807033021 AddGroupToWebHookEventType: migrating =======================
-- add_column(:web_hook_event_types, :group, :integer)
-> 0.0004s
== 20230807033021 AddGroupToWebHookEventType: migrated (0.0007s) ==============
== 20230807040058 MoveWebHooksToNewEventIds: migrating ========================
-- execute("INSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 101, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 102, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 103, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 104, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 105, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 201, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 2;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 202, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 2;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 203, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 2;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 204, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 2;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 301, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 302, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 303, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 304, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 305, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 306, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 307, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 308, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 309, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 401, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 4;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 402, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 4;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 403, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 4;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 501, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 5;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 502, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 5;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 503, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 5;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 601, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 6;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 602, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 6;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 603, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 6;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 901, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 9;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 902, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 9;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1001, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 10;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1101, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 11;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1102, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 11;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1201, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 12;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1202, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 12;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1301, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 13;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1302, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 13;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1401, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 14;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1402, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 14;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1501, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 15;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1601, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 16;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1701, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 17;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1702, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 17;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1801, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 18;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1802, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 18;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1803, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 18;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1804, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 18;\n\nDELETE FROM web_hook_event_types WHERE id < 100;\n")
-> 0.0019s
== 20230807040058 MoveWebHooksToNewEventIds: migrated (0.0024s) ===============
== 20230816211907 IncreaseSizeOfSidebarUrls: migrating ========================
-- change_column(:sidebar_urls, :value, :string, {:limit=>1000})
-> 0.0028s
== 20230816211907 IncreaseSizeOfSidebarUrls: migrated (0.0033s) ===============
== 20230817174049 EnsureJavascriptCacheIsUniquePerTheme: migrating ============
-- remove_index(:javascript_caches, :theme_id)
-> 0.0022s
-- add_index(:javascript_caches, :theme_id, {:unique=>true, :name=>"index_javascript_caches_on_theme_id"})
-> 0.0026s
-- remove_index(:javascript_caches, :theme_field_id)
-> 0.0021s
-- add_index(:javascript_caches, :theme_field_id, {:unique=>true, :name=>"index_javascript_caches_on_theme_field_id"})
-> 0.0027s
== 20230817174049 EnsureJavascriptCacheIsUniquePerTheme: migrated (0.0102s) ===
== 20230823095931 AddLimitToUserSecondFactorName: migrating ===================
-- execute("UPDATE user_second_factors\nSET name = LEFT(name, 300)\nWHERE name IS NOT NULL AND LENGTH(name) > 300\n")
-> 0.0006s
-- change_column(:user_second_factors, :name, :string, {:limit=>300})
-> 0.0097s
== 20230823095931 AddLimitToUserSecondFactorName: migrated (0.0111s) ==========
== 20230823100627 AddLimitToUserSecurityKeyName: migrating ====================
-- execute("UPDATE user_security_keys\nSET name = LEFT(name, 300)\nWHERE name IS NOT NULL AND LENGTH(name) > 300\n")
-> 0.0007s
-- change_column(:user_security_keys, :name, :string, {:limit=>300})
-> 0.0198s
== 20230823100627 AddLimitToUserSecurityKeyName: migrated (0.0213s) ===========
== 20230831153649 DeleteUnusedSiteSettings: migrating =========================
-- execute("DELETE\nFROM\n \"site_settings\"\nWHERE\n \"name\" IN (\n 'rate_limit_new_user_create_topic',\n 'enable_system_avatars',\n 'check_for_new_features',\n 'allow_user_api_keys'\n )\n")
-> 0.0003s
== 20230831153649 DeleteUnusedSiteSettings: migrated (0.0008s) ================
== 20230906030920 ChangeAutoSilenceFastTypersSettingToEnumType: migrating =====
-- execute("UPDATE\n \"site_settings\"\nSET\n \"data_type\" = 7\nWHERE\n \"name\" = 'auto_silence_fast_typers_max_trust_level' AND\n \"data_type\" = 3\n")
-> 0.0002s
== 20230906030920 ChangeAutoSilenceFastTypersSettingToEnumType: migrated (0.0006s)
== 20230907225057 CreateThemeSettingsMigrations: migrating ====================
-- create_table(:theme_settings_migrations)
-> 0.0068s
-- add_index(:theme_settings_migrations, [:theme_id, :version], {:unique=>true, :name=>"index_theme_settings_migrations_on_theme_id_and_version"})
-> 0.0030s
-- add_index(:theme_settings_migrations, :theme_field_id, {:unique=>true, :name=>"index_theme_settings_migrations_on_theme_field_id"})
-> 0.0028s
== 20230907225057 CreateThemeSettingsMigrations: migrated (0.0133s) ===========
== 20230910021213 UpdateCategorySettingApprovalValues: migrating ==============
-- change_column_default(:category_settings, :require_topic_approval, false)
-> 0.0016s
-- change_column_default(:category_settings, :require_reply_approval, false)
-> 0.0013s
-- execute("WITH custom_fields AS (\n SELECT\n category_id,\n MAX(\n CASE WHEN (name = 'require_topic_approval')\n THEN NULLIF(value, '') ELSE NULL END\n )::boolean AS require_topic_approval,\n MAX(\n CASE WHEN (name = 'require_reply_approval')\n THEN NULLIF(value, '') ELSE NULL END\n )::boolean AS require_reply_approval,\n NOW() AS created_at,\n NOW() AS updated_at\n FROM category_custom_fields\n WHERE name IN (\n 'require_topic_approval',\n 'require_reply_approval'\n )\n GROUP BY category_id\n)\nINSERT INTO\n category_settings(\n category_id,\n require_topic_approval,\n require_reply_approval,\n created_at,\n updated_at\n )\nSELECT * FROM custom_fields\nON CONFLICT (category_id) DO\nUPDATE SET\n require_topic_approval = EXCLUDED.require_topic_approval,\n require_reply_approval = EXCLUDED.require_reply_approval,\n updated_at = NOW()\n")
-> 0.0005s
-- execute("UPDATE category_settings\nSET require_topic_approval = false\nWHERE require_topic_approval IS NULL;\n")
-> 0.0002s
-- execute("UPDATE category_settings\nSET require_reply_approval = false\nWHERE require_reply_approval IS NULL;\n")
-> 0.0002s
== 20230910021213 UpdateCategorySettingApprovalValues: migrated (0.0045s) =====
== 20230913194832 RenameRevokeApiKeysSettings: migrating ======================
-- execute("UPDATE site_settings SET name = 'revoke_api_keys_unused_days' where name = 'revoke_api_keys_days'")
-> 0.0002s
-- execute("UPDATE site_settings SET name = 'revoke_user_api_keys_unused_days' where name = 'expire_user_api_keys_days'")
-> 0.0001s
== 20230913194832 RenameRevokeApiKeysSettings: migrated (0.0007s) =============
== 20230926165821 DropPostUploadsTable: migrating =============================
== 20230926165821 DropPostUploadsTable: migrated (0.0018s) ====================
== 20231004020328 MigrateLegacyNavigationMenuSiteSetting: migrating ===========
-- execute("UPDATE site_settings SET value = 'header dropdown' WHERE name = 'navigation_menu' AND value = 'legacy'")
-> 0.0004s
== 20231004020328 MigrateLegacyNavigationMenuSiteSetting: migrated (0.0009s) ==
== 20231006160650 AddGroupFieldToDirectMessageChannels: migrating =============
-- add_column(:direct_message_channels, :group, :boolean, {:default=>false, :null=>false})
-> 0.0007s
== 20231006160650 AddGroupFieldToDirectMessageChannels: migrated (0.0011s) ====
== 20231006161051 SetMultiusersDirectMessageChannelsAsGroup: migrating ========
-- execute(" UPDATE direct_message_channels\n SET \"group\" = true\n WHERE id IN (\n SELECT direct_message_channel_id\n FROM direct_message_users\n GROUP BY direct_message_channel_id\n HAVING COUNT(user_id) > 2\n );\n")
-> 0.0007s
== 20231006161051 SetMultiusersDirectMessageChannelsAsGroup: migrated (0.0011s)
== 20231017044708 RemoveEnableExperimentalHashtagAutocompleteSetting: migrating
-- execute("DELETE FROM site_settings\nWHERE name = 'enable_experimental_hashtag_autocomplete'\n")
-> 0.0002s
== 20231017044708 RemoveEnableExperimentalHashtagAutocompleteSetting: migrated (0.0006s)
== 20231017175757 ChangeUserGroupMembershipThroughBadgeScriptBadgeNameFieldToBadge: migrating
== 20231017175757 ChangeUserGroupMembershipThroughBadgeScriptBadgeNameFieldToBadge: migrated (0.0009s)
== 20231018225833 AddDarkModeBackgroundToCategories: migrating ================
-- add_column(:categories, :uploaded_background_dark_id, :integer, {:index=>true})
-> 0.0005s
== 20231018225833 AddDarkModeBackgroundToCategories: migrated (0.0009s) =======
== 20231022224833 UpdateCustomFieldData: migrating ============================
== 20231022224833 UpdateCustomFieldData: migrated (0.0013s) ===================
== 20231024034031 MigrateTlToGroupSettingsAnonymousPostingMinTl: migrating ====
== 20231024034031 MigrateTlToGroupSettingsAnonymousPostingMinTl: migrated (0.0005s)
== 20231103060018 FixInvalidTopicUserBookmarkedData: migrating ================
== 20231103060018 FixInvalidTopicUserBookmarkedData: migrated (0.0010s) =======
== 20231107014123 MigrateSharedDraftsMinTrustLevelToGroup: migrating ==========
== 20231107014123 MigrateSharedDraftsMinTrustLevelToGroup: migrated (0.0005s) =
== 20231107055903 MigrateMinTrustLevelForHereMentionToGroup: migrating ========
== 20231107055903 MigrateMinTrustLevelForHereMentionToGroup: migrated (0.0006s)
== 20231110214451 AddsThreadIdToChatDrafts: migrating =========================
-- add_column(:chat_drafts, :thread_id, :bigint)
-> 0.0004s
== 20231110214451 AddsThreadIdToChatDrafts: migrated (0.0008s) ================
== 20231111201253 RenameExperimentalPasskeysSiteSetting: migrating ============
-- execute("UPDATE site_settings SET name = 'enable_passkeys' WHERE name = 'experimental_passkeys'")
-> 0.0002s
== 20231111201253 RenameExperimentalPasskeysSiteSetting: migrated (0.0005s) ===
== 20231117182638 FillApproveUnlessAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231117182638 FillApproveUnlessAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0004s)
== 20231120190818 TriggerPostRebakeCategoryStyleQuotes: migrating =============
== 20231120190818 TriggerPostRebakeCategoryStyleQuotes: migrated (0.0034s) ====
== 20231122043756 IncreaseSizeOfTagDescriptions: migrating ====================
-- change_column(:tags, :description, :string, {:limit=>1000})
-> 0.0107s
== 20231122043756 IncreaseSizeOfTagDescriptions: migrated (0.0113s) ===========
== 20231122152552 FillNewTopicsUnlessAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231122152552 FillNewTopicsUnlessAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0011s)
== 20231122212122 FillEmailInAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231122212122 FillEmailInAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0008s)
== 20231127165331 TriggerAutoLinkingForVideosSincePlaceholder: migrating ======
== 20231127165331 TriggerAutoLinkingForVideosSincePlaceholder: migrated (0.0023s)
== 20231205013029 FillUploadedAvatarsAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231205013029 FillUploadedAvatarsAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0008s)
== 20231206041353 FillCreateTopicAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231206041353 FillCreateTopicAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20231207011238 FillEditWikiPostAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231207011238 FillEditWikiPostAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20231207135641 AddUserChatThreadMembershipsOnThreadIdUserIdIndex: migrating
-- execute("DROP INDEX CONCURRENTLY IF EXISTS idx_user_chat_thread_memberships_on_thread_id_user_id\n")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY idx_user_chat_thread_memberships_on_thread_id_user_id\nON user_chat_thread_memberships (thread_id, user_id);\n")
-> 0.0032s
== 20231207135641 AddUserChatThreadMembershipsOnThreadIdUserIdIndex: migrated (0.0043s)
== 20231212044856 FillEditPostAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231212044856 FillEditPostAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0006s)
== 20231213060822 FillFlagPostAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231213060822 FillFlagPostAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20231213103248 FillDeleteAllPostsAndTopicsAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231213103248 FillDeleteAllPostsAndTopicsAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20231214020814 FillUserCardBackgroundAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231214020814 FillUserCardBackgroundAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0004s)
== 20231214023728 FillInviteAllowedGroupsBasedOnDeprecatedSettings: migrating =
== 20231214023728 FillInviteAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20231214031754 FillIgnoreAllowedGroupsBasedOnDeprecatedSettings: migrating =
== 20231214031754 FillIgnoreAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0004s)
== 20231214061615 FillCreateTagAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231214061615 FillCreateTagAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20231214180000 AddChatMentionNotifications: migrating ======================
-- create_table(:chat_mention_notifications, {:id=>false})
-> 0.0008s
-- add_index(:chat_mention_notifications, [:chat_mention_id], {:name=>"index_chat_mention_notifications_on_chat_mention_id"})
-> 0.0028s
-- add_index(:chat_mention_notifications, [:notification_id], {:unique=>true, :name=>"index_chat_mention_notifications_on_notification_id"})
-> 0.0024s
== 20231214180000 AddChatMentionNotifications: migrated (0.0066s) =============
== 20231214180001 UpdateRelationshipBetweenChatMentionsAndNotifications: migrating
== 20231214180001 UpdateRelationshipBetweenChatMentionsAndNotifications: migrated (0.0012s)
== 20231214180002 UpdateRelationshipBetweenChatMentionsAndNotificationsPostMigrate: migrating
== 20231214180002 UpdateRelationshipBetweenChatMentionsAndNotificationsPostMigrate: migrated (0.0007s)
== 20231218081901 FillSendEmailMessagesAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231218081901 FillSendEmailMessagesAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20231222030024 FillSelfWikiAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231222030024 FillSelfWikiAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20231227160001 AddTypeAndTargetIdToChatMentions: migrating =================
-- add_column(:chat_mentions, :type, :string, {:null=>true})
-> 0.0030s
-- add_column(:chat_mentions, :target_id, :integer, {:null=>true})
-> 0.0003s
-- change_column_null(:chat_mentions, :user_id, true, nil)
-> 0.0002s
== 20231227160001 AddTypeAndTargetIdToChatMentions: migrated (0.0040s) ========
== 20231227160002 SetTypeAndTargetIdOnChatMentions: migrating =================
== 20231227160002 SetTypeAndTargetIdOnChatMentions: migrated (0.0008s) ========
== 20231227160003 AddAndRemoveIndexesOnChatMentions: migrating ================
-- remove_index(:chat_mentions, {:name=>:chat_mentions_index, :algorithm=>:concurrently, :if_exists=>true})
-> 0.0069s
-- add_index(:chat_mentions, [:chat_message_id], {:algorithm=>:concurrently, :name=>"index_chat_mentions_on_chat_message_id"})
-> 0.0030s
-- add_index(:chat_mentions, [:target_id], {:algorithm=>:concurrently, :name=>"index_chat_mentions_on_target_id"})
-> 0.0028s
== 20231227160003 AddAndRemoveIndexesOnChatMentions: migrated (0.0134s) =======
== 20231227160004 SetTypeAndTargetIdOnChatMentionsPostMigrate: migrating ======
== 20231227160004 SetTypeAndTargetIdOnChatMentionsPostMigrate: migrated (0.0010s)
== 20231227160005 MakeTypeOnChatMentionsNonNullable: migrating ================
-- change_column_null(:chat_mentions, :type, false, nil)
-> 0.0003s
== 20231227160005 MakeTypeOnChatMentionsNonNullable: migrated (0.0007s) =======
== 20240104155715 AddEmbedContentCacheToTopicEmbed: migrating =================
-- add_column(:topic_embeds, :embed_content_cache, :text)
-> 0.0004s
== 20240104155715 AddEmbedContentCacheToTopicEmbed: migrated (0.0008s) ========
== 20240108022138 ChangeEnableAdminSidebarToGroupPostMigration: migrating =====
== 20240108022138 ChangeEnableAdminSidebarToGroupPostMigration: migrated (0.0005s)
== 20240110040813 FillSkipReviewMediaGroupsBasedOnDeprecatedSetting: migrating
== 20240110040813 FillSkipReviewMediaGroupsBasedOnDeprecatedSetting: migrated (0.0005s)
== 20240112021335 SetMaxCleanOrphanUploadsGracePeriodHours: migrating =========
== 20240112021335 SetMaxCleanOrphanUploadsGracePeriodHours: migrated (0.0004s)
== 20240112043325 FillEmbeddedMediaPostAllowedGroupsBasedOnDeprecatedSetting: migrating
== 20240112043325 FillEmbeddedMediaPostAllowedGroupsBasedOnDeprecatedSetting: migrated (0.0005s)
== 20240112073149 FillTagTopicAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20240112073149 FillTagTopicAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20240116043702 CreateTopicHotScores: migrating =============================
-- create_table(:topic_hot_scores)
-> 0.0046s
-- add_index(:topic_hot_scores, :topic_id, {:unique=>true, :name=>"index_topic_hot_scores_on_topic_id"})
-> 0.0025s
-- add_index(:topic_hot_scores, [:score, :topic_id], {:unique=>true, :name=>"index_topic_hot_scores_on_score_and_topic_id"})
-> 0.0025s
== 20240116043702 CreateTopicHotScores: migrated (0.0103s) ====================
== 20240116182229 MigrateLazyLoadCategoriesToGroups: migrating ================
-- execute("UPDATE site_settings\nSET name = 'lazy_load_categories_groups', data_type = 20, value = '0'\nWHERE name = 'lazy_load_categories' AND value = 't'\n")
-> 0.0003s
-- execute("UPDATE site_settings\nSET name = 'lazy_load_categories_groups', data_type = 20, value = ''\nWHERE name = 'lazy_load_categories' AND value = 'f'\n")
-> 0.0002s
== 20240116182229 MigrateLazyLoadCategoriesToGroups: migrated (0.0009s) =======
== 20240117090801 FillPostLinksAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20240117090801 FillPostLinksAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20240117093148 FillUserApiKeyAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20240117093148 FillUserApiKeyAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)
== 20240118120825 AddThreadsEnabledSiteSetting: migrating =====================
== 20240118120825 AddThreadsEnabledSiteSetting: migrated (0.0023s) ============
== 20240122015626 FillPollCreateAllowedGroupsBasedOnDeprecatedSetting: migrating
== 20240122015626 FillPollCreateAllowedGroupsBasedOnDeprecatedSetting: migrated (0.0070s)
== 20240122015630 FillStyleguideAdminOnlyGroups: migrating ====================
== 20240122015630 FillStyleguideAdminOnlyGroups: migrated (0.0015s) ===========
== 20240201170412 FixTagTopicAllowedGroupsSetting: migrating ==================
== 20240201170412 FixTagTopicAllowedGroupsSetting: migrated (0.0013s) =========
== 20240202032242 AddJsonValueToThemeSettings: migrating ======================
-- add_column(:theme_settings, :json_value, :jsonb)
-> 0.0010s
== 20240202032242 AddJsonValueToThemeSettings: migrated (0.0015s) =============
== 20240202052058 DropBadgeImageColumn: migrating =============================
== 20240202052058 DropBadgeImageColumn: migrated (0.0016s) ====================
== 20240202204030 FixHereMentionAllowedGroupsSetting: migrating ===============
== 20240202204030 FixHereMentionAllowedGroupsSetting: migrated (0.0008s) ======
== 20240204204532 AddUserToPermalink: migrating ===============================
-- add_column(:permalinks, :user_id, :integer)
-> 0.0004s
== 20240204204532 AddUserToPermalink: migrated (0.0009s) ======================
== 20240212034010 DropDeprecatedColumns: migrating ============================
== 20240212034010 DropDeprecatedColumns: migrated (0.0152s) ===================
== 20240213175713 AddStreamingToMessage: migrating ============================
-- add_column(:chat_messages, :streaming, :boolean, {:null=>false, :default=>false})
-> 0.0007s
== 20240213175713 AddStreamingToMessage: migrated (0.0011s) ===================
== 20240214135517 FixChatChannelSlugIndex: migrating ==========================
-- remove_index(:chat_channels, :slug)
-> 0.0028s
-- add_index(:chat_channels, :slug, {:unique=>true, :where=>"slug != ''", :name=>"index_chat_channels_on_slug"})
-> 0.0052s
== 20240214135517 FixChatChannelSlugIndex: migrated (0.0086s) =================
== 20240216073624 FillProfileBackgroundAllowedGroupsBasedOnDeprecatedSetting: migrating
== 20240216073624 FillProfileBackgroundAllowedGroupsBasedOnDeprecatedSetting: migrated (0.0008s)
== 20240219012001 RemoveEnableExperimentalAdminUiGroupsSiteSettings: migrating
-- execute("DELETE FROM site_settings WHERE name = 'enable_experimental_admin_ui_groups'")
-> 0.0002s
== 20240219012001 RemoveEnableExperimentalAdminUiGroupsSiteSettings: migrated (0.0006s)
== 20240223052820 CreateProblemCheckTrackers: migrating =======================
-- create_table(:problem_check_trackers)
-> 0.0092s
== 20240223052820 CreateProblemCheckTrackers: migrated (0.0097s) ==============
== 20240301033753 DeleteOldBookmarkReminderSetting: migrating =================
== 20240301033753 DeleteOldBookmarkReminderSetting: migrated (0.0006s) ========
== 20240301100413 AddForceToThreads: migrating ================================
-- add_column(:chat_threads, :force, :boolean, {:null=>false, :default=>false})
-> 0.0006s
== 20240301100413 AddForceToThreads: migrated (0.0010s) =======================
== 20240304030429 TopicIdOnIncomingEmailIndex: migrating ======================
-- remove_index(:incoming_emails, :topic_id, {:if_exists=>true})
-> 0.0029s
-- add_index(:incoming_emails, :topic_id, {:algorithm=>:concurrently, :name=>"index_incoming_emails_on_topic_id"})
-> 0.0031s
== 20240304030429 TopicIdOnIncomingEmailIndex: migrated (0.0066s) =============
== 20240306063428 AddIndexesToNotifications: migrating ========================
-- execute("DROP INDEX IF EXISTS index_notifications_user_menu_ordering\n")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY index_notifications_user_menu_ordering\nON notifications (\n user_id,\n (high_priority AND NOT read) DESC,\n (NOT read) DESC,\n created_at DESC\n);\n")
-> 0.0035s
-- execute("DROP INDEX IF EXISTS index_notifications_user_menu_ordering_deprioritized_likes\n")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY index_notifications_user_menu_ordering_deprioritized_likes\nON notifications (\n user_id,\n (high_priority AND NOT read) DESC,\n (NOT read AND notification_type NOT IN (5,19,25)) DESC,\n created_at DESC\n);\n")
-> 0.0038s
== 20240306063428 AddIndexesToNotifications: migrated (0.0083s) ===============
== 20240307231053 AddTopicsUnreadWhenClosedToUserOptions: migrating ===========
-- add_column(:user_options, :topics_unread_when_closed, :boolean, {:default=>true, :null=>false})
-> 0.0008s
== 20240307231053 AddTopicsUnreadWhenClosedToUserOptions: migrated (0.0012s) ==
== 20240311015942 CreateAdminNotices: migrating ===============================
-- create_table(:admin_notices)
-> 0.0121s
== 20240311015942 CreateAdminNotices: migrated (0.0127s) ======================
== 20240326200232 AddCustomHomepageThemeModifiers: migrating ==================
-- add_column(:theme_modifier_sets, :custom_homepage, :boolean, {:null=>true})
-> 0.0004s
== 20240326200232 AddCustomHomepageThemeModifiers: migrated (0.0009s) =========
== 20240327000440 ReplacePostReplyIndex: migrating ============================
-- execute("DROP INDEX CONCURRENTLY IF EXISTS \"index_posts_on_topic_id_and_reply_to_post_number\"\n")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS \"index_posts_on_topic_id_and_reply_to_post_number\"\nON \"posts\" (\"topic_id\", \"reply_to_post_number\")\n")
-> 0.0036s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS \"index_posts_on_reply_to_post_number\"\n")
-> 0.0047s
== 20240327000440 ReplacePostReplyIndex: migrated (0.0092s) ===================
== 20240327043323 DisableAdminSidebarForExistingSites: migrating ==============
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('admin_sidebar_enabled_groups', 20, '-1', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0003s
== 20240327043323 DisableAdminSidebarForExistingSites: migrated (0.0012s) =====
== 20240401054228 AddDetailsToProblemCheckTrackers: migrating =================
-- add_column(:problem_check_trackers, :details, :json, {:default=>{}})
-> 0.0006s
== 20240401054228 AddDetailsToProblemCheckTrackers: migrated (0.0010s) ========
== 20240404034232 RemoveExperimentalObjectsTypeForThemeSettings: migrating ====
-- execute("DELETE FROM site_settings WHERE name = 'experimental_objects_type_for_theme_settings'")
-> 0.0002s
== 20240404034232 RemoveExperimentalObjectsTypeForThemeSettings: migrated (0.0005s)
== 20240408140000 DropNotificationIdFromChatMentions: migrating ===============
== 20240408140000 DropNotificationIdFromChatMentions: migrated (0.0013s) ======
== 20240409060201 AddThreadTitlePromptToUserChatThreadMemberships: migrating ==
-- add_column(:user_chat_thread_memberships, :thread_title_prompt_seen, :boolean, {:default=>false, :null=>false})
-> 0.0005s
== 20240409060201 AddThreadTitlePromptToUserChatThreadMemberships: migrated (0.0009s)
== 20240409093348 AddShowThreadTitlePromptsToUserOptions: migrating ===========
-- add_column(:user_options, :show_thread_title_prompts, :boolean)
-> 0.0004s
== 20240409093348 AddShowThreadTitlePromptsToUserOptions: migrated (0.0008s) ==
== 20240410130000 DropUserIdFromChatMentions: migrating =======================
== 20240410130000 DropUserIdFromChatMentions: migrated (0.0011s) ==============
== 20240416105733 AddRankToPollVotes: migrating ===============================
-- add_column(:poll_votes, :rank, :integer, {:null=>false, :default=>0})
-> 0.0005s
== 20240416105733 AddRankToPollVotes: migrated (0.0008s) ======================
== 20240422015830 RemoveAdminGuideTooltipFromSeenPopups: migrating ============
-- execute("UPDATE user_options SET seen_popups = ARRAY_REMOVE(user_options2.seen_popups, 6)\nFROM (SELECT user_id, seen_popups FROM user_options) AS user_options2\nWHERE 6 = ANY (user_options.seen_popups)\n AND user_options.user_id = user_options2.user_id\n")
-> 0.0006s
== 20240422015830 RemoveAdminGuideTooltipFromSeenPopups: migrated (0.0010s) ===
== 20240422042830 AddExcerptToChatMessages: migrating =========================
-- add_column(:chat_messages, :excerpt, :string, {:limit=>1000, :null=>true})
-> 0.0003s
== 20240422042830 AddExcerptToChatMessages: migrated (0.0007s) ================
== 20240423013808 AddVisibilityReasonIdToTopics: migrating ====================
-- add_column(:topics, :visibility_reason_id, :integer)
-> 0.0004s
== 20240423013808 AddVisibilityReasonIdToTopics: migrated (0.0007s) ===========
== 20240423054323 CreateFlags: migrating ======================================
-- create_table(:flags)
-> 0.0072s
== 20240423054323 CreateFlags: migrated (0.0089s) =============================
== 20240425133407 DropChatChannelsLastMessageSentAt: migrating ================
== 20240425133407 DropChatChannelsLastMessageSentAt: migrated (0.0017s) =======
== 20240430051551 AddUserIdToEmbeddableHosts: migrating =======================
-- add_column(:embeddable_hosts, :user_id, :integer)
-> 0.0004s
== 20240430051551 AddUserIdToEmbeddableHosts: migrated (0.0007s) ==============
== 20240430052017 CreateEmbeddableHostTags: migrating =========================
-- create_table(:embeddable_host_tags)
-> 0.0039s
-- add_index(:embeddable_host_tags, :embeddable_host_id, {:name=>"index_embeddable_host_tags_on_embeddable_host_id"})
-> 0.0027s
-- add_index(:embeddable_host_tags, :tag_id, {:name=>"index_embeddable_host_tags_on_tag_id"})
-> 0.0026s
-- add_index(:embeddable_host_tags, [:embeddable_host_id, :tag_id], {:unique=>true, :name=>"index_embeddable_host_tags_on_embeddable_host_id_and_tag_id"})
-> 0.0026s
== 20240430052017 CreateEmbeddableHostTags: migrated (0.0125s) ================
== 20240430185434 FixWatchedWordsWithoutAction: migrating =====================
-- execute("UPDATE watched_words\nSET action = 2\nWHERE action = 0\nAND LENGTH(COALESCE(replacement, '')) = 0\n")
-> 0.0005s
-- execute("UPDATE watched_words\nSET action = 5\nWHERE action = 0\n")
-> 0.0002s
-- execute("UPDATE watched_word_groups\nSET action = ww.action\nFROM watched_words ww\nWHERE ww.watched_word_group_id = watched_word_groups.id\nAND ww.action != 0\nAND watched_word_groups.action = 0\n")
-> 0.0004s
== 20240430185434 FixWatchedWordsWithoutAction: migrated (0.0015s) ============
== 20240506035024 ClearOrphanedDraftUploadReferences: migrating ===============
-- execute("DELETE\nFROM\n \"upload_references\"\nWHERE\n \"upload_references\".\"target_type\" = 'Draft' AND\n \"upload_references\".\"target_id\" NOT IN (\n SELECT \"drafts\".\"id\" FROM \"drafts\"\n )\n")
-> 0.0003s
== 20240506035024 ClearOrphanedDraftUploadReferences: migrated (0.0006s) ======
== 20240506125839 AddHtmlToWatchedWords: migrating ============================
-- add_column(:watched_words, :html, :boolean, {:default=>false, :null=>false})
-> 0.0006s
== 20240506125839 AddHtmlToWatchedWords: migrated (0.0010s) ===================
== 20240507112651 SwitchTopicAutomationCustomFieldsToJson: migrating ==========
-- execute("DELETE FROM topic_custom_fields\nWHERE name = 'discourse_automation_ids'\n")
-> 0.0002s
== 20240507112651 SwitchTopicAutomationCustomFieldsToJson: migrated (0.0010s) =
== 20240507112751 SwitchUserAutomationCustomFieldsToJson: migrating ===========
-- execute("DELETE FROM user_custom_fields\nWHERE name = 'discourse_automation_ids'\n")
-> 0.0002s
== 20240507112751 SwitchUserAutomationCustomFieldsToJson: migrated (0.0010s) ==
== 20240507112851 SwitchTopicAutomationTriggeredIdsCustomFieldsToJson: migrating
-- execute("DELETE FROM topic_custom_fields\nWHERE name = 'auto_responder_triggered_ids'\n")
-> 0.0002s
== 20240507112851 SwitchTopicAutomationTriggeredIdsCustomFieldsToJson: migrated (0.0007s)
== 20240507112951 DropAutomationIdsCustomFieldIndexes: migrating ==============
-- remove_index(:topic_custom_fields, {:name=>:idx_topic_custom_fields_discourse_automation_unique_id_partial, :if_exists=>true})
-> 0.0043s
-- remove_index(:user_custom_fields, {:name=>:idx_user_custom_fields_discourse_automation_unique_id_partial, :if_exists=>true})
-> 0.0032s
-- remove_index(:post_custom_fields, {:name=>:idx_post_custom_fields_discourse_automation_unique_id_partial, :if_exists=>true})
-> 0.0048s
== 20240507112951 DropAutomationIdsCustomFieldIndexes: migrated (0.0128s) =====
== 20240510073417 IncreaseExternalAvatarUrlLimit: migrating ===================
-- change_column(:single_sign_on_records, :external_avatar_url, :string, {:limit=>1500})
-> 0.0005s
== 20240510073417 IncreaseExternalAvatarUrlLimit: migrated (0.0010s) ==========
== 20240516145911 UpdateUserOptionsForThreadTitlePrompts: migrating ===========
-- change_column_default(:user_options, :show_thread_title_prompts, true)
-> 0.0036s
-- change_column_null(:user_options, :show_thread_title_prompts, false, nil)
-> 0.0004s
== 20240516145911 UpdateUserOptionsForThreadTitlePrompts: migrated (0.0068s) ==
== 20240517014119 AddTargetToProblemCheckTrackers: migrating ==================
-- add_column(:problem_check_trackers, :target, :string, {:null=>true})
-> 0.0004s
== 20240517014119 AddTargetToProblemCheckTrackers: migrated (0.0008s) =========
== 20240517051933 DisambiguateProblemCheckTrackerUniqueness: migrating ========
-- remove_index(:problem_check_trackers, {:name=>"index_problem_check_trackers_on_identifier"})
-> 0.0004s
-- add_index(:problem_check_trackers, [:identifier, :target], {:unique=>true, :name=>"index_problem_check_trackers_on_identifier_and_target"})
-> 0.0031s
== 20240517051933 DisambiguateProblemCheckTrackerUniqueness: migrated (0.0040s)
== 20240520060901 AddRequirementToUserFields: migrating =======================
-- add_column(:user_fields, :requirement, :integer, {:null=>false, :default=>0})
-> 0.0008s
-- execute("UPDATE user_fields\nSET requirement =\n (CASE WHEN required IS NOT TRUE THEN 0 ELSE 2 END)\n")
-> 0.0003s
== 20240520060901 AddRequirementToUserFields: migrated (0.0018s) ==============
== 20240527015009 AddTopicViewStats: migrating ================================
-- create_table(:topic_view_stats)
-> 0.0043s
-- add_index(:topic_view_stats, [:topic_id, :viewed_at], {:unique=>true, :name=>"index_topic_view_stats_on_topic_id_and_viewed_at"})
-> 0.0027s
-- add_index(:topic_view_stats, [:viewed_at, :topic_id], {:name=>"index_topic_view_stats_on_viewed_at_and_topic_id"})
-> 0.0022s
== 20240527015009 AddTopicViewStats: migrated (0.0099s) =======================
== 20240527055057 AddScoreTypeToFlags: migrating ==============================
-- add_column(:flags, :score_type, :boolean, {:default=>false, :null=>false})
-> 0.0006s
== 20240527055057 AddScoreTypeToFlags: migrated (0.0010s) =====================
== 20240531053226 CreateUserRequiredFieldsVersion: migrating ==================
-- create_table(:user_required_fields_versions)
-> 0.0034s
-- add_column(:users, :required_fields_version, :integer)
-> 0.0004s
== 20240531053226 CreateUserRequiredFieldsVersion: migrated (0.0043s) =========
== 20240603234529 CreateUserPasswords: migrating ==============================
-- create_table(:user_passwords, {:id=>:integer})
-> 0.0037s
-- add_index(:user_passwords, [:user_id], {:unique=>true, :where=>"password_expired_at IS NULL", :name=>"index_user_passwords_on_user_id"})
-> 0.0039s
-- add_index(:user_passwords, [:user_id, :password_hash], {:unique=>true, :name=>"index_user_passwords_on_user_id_and_password_hash"})
-> 0.0022s
-- add_index(:user_passwords, [:user_id, :password_expired_at, :password_hash], {:name=>"idx_user_passwords_on_user_id_and_expired_at_and_hash"})
-> 0.0022s
== 20240603234529 CreateUserPasswords: migrated (0.0127s) =====================
== 20240606003822 ReorderFlags: migrating =====================================
== 20240606003822 ReorderFlags: migrated (0.0008s) ============================
== 20240610150449 LimitTagGroupNameLength: migrating ==========================
-- change_column(:tag_groups, :name, :string, {:limit=>100})
-> 0.0030s
== 20240610150449 LimitTagGroupNameLength: migrated (0.0037s) =================
== 20240612063735 AddFieldTypeEnumToUserFields: migrating =====================
-- add_column(:user_fields, :field_type_enum, :integer)
-> 0.0005s
-- execute("UPDATE user_fields\nSET field_type_enum =\n CASE\n WHEN field_type = 'text' THEN 0\n WHEN field_type = 'confirm' THEN 1\n WHEN field_type = 'dropdown' THEN 2\n WHEN field_type = 'multiselect' THEN 3\n END\n")
-> 0.0003s
-- change_column_null(:user_fields, :field_type, true, nil)
-> 0.0002s
-- change_column_null(:user_fields, :field_type_enum, false, nil)
-> 0.0002s
== 20240612063735 AddFieldTypeEnumToUserFields: migrated (0.0019s) ============
== 20240612073116 SwapFieldTypeWithFieldTypeEnumOnUserFields: migrating =======
== 20240612073116 SwapFieldTypeWithFieldTypeEnumOnUserFields: migrated (0.0003s)
== 20240619123052 CreateWebHookEventsDailyAggregates: migrating ===============
-- create_table(:web_hook_events_daily_aggregates)
-> 0.0064s
== 20240619123052 CreateWebHookEventsDailyAggregates: migrated (0.0068s) ======
== 20240620024938 AddBackFieldTypeEnumToUserFields: migrating =================
== 20240620024938 AddBackFieldTypeEnumToUserFields: migrated (0.0020s) ========
== 20240627125112 RemoveInvalidCspScriptSrcSiteSettingValues: migrating =======
== 20240627125112 RemoveInvalidCspScriptSrcSiteSettingValues: migrated (0.0006s)
== 20240627155730 CreateRedeliveringWebhookEvents: migrating ==================
-- create_table(:redelivering_webhook_events)
-> 0.0062s
== 20240627155730 CreateRedeliveringWebhookEvents: migrated (0.0067s) =========
== 20240705134114 ClearOrphanedDraftUploadReferences2: migrating ==============
-- execute("DELETE\nFROM\n \"upload_references\"\nWHERE\n \"upload_references\".\"target_type\" = 'Draft' AND\n \"upload_references\".\"target_id\" NOT IN (\n SELECT \"drafts\".\"id\" FROM \"drafts\"\n )\n")
-> 0.0003s
== 20240705134114 ClearOrphanedDraftUploadReferences2: migrated (0.0007s) =====
== 20240705153533 AddUserAgentToSearchLogs: migrating =========================
-- add_column(:search_logs, :user_agent, :string, {:null=>true, :limit=>2000})
-> 0.0004s
== 20240705153533 AddUserAgentToSearchLogs: migrated (0.0008s) ================
== 20240709010639 RemoveCrossOriginUnsafeNoneReferrersSetting: migrating ======
-- execute("DELETE FROM site_settings\nWHERE name = 'cross_origin_opener_unsafe_none_referrers'\n")
-> 0.0002s
== 20240709010639 RemoveCrossOriginUnsafeNoneReferrersSetting: migrated (0.0006s)
== 20240709015048 RemoveLoggingProviderSiteSetting: migrating =================
-- execute("DELETE FROM site_settings WHERE name = 'logging_provider'")
-> 0.0002s
== 20240709015048 RemoveLoggingProviderSiteSetting: migrated (0.0005s) ========
== 20240711123755 DropCompiledJsFromTranslationOverrides: migrating ===========
== 20240711123755 DropCompiledJsFromTranslationOverrides: migrated (0.0015s) ==
== 20240711153837 AddCreatedBySdkToChatMessages: migrating ====================
-- add_column(:chat_messages, :created_by_sdk, :boolean)
-> 0.0004s
== 20240711153837 AddCreatedBySdkToChatMessages: migrated (0.0008s) ===========
== 20240711154622 UpdateChatMessagesCreatedBySdk: migrating ===================
-- change_column_default(:chat_messages, :created_by_sdk, false)
-> 0.0020s
-- change_column_null(:chat_messages, :created_by_sdk, false)
-> 0.0003s
== 20240711154622 UpdateChatMessagesCreatedBySdk: migrated (0.0031s) ==========
== 20240712050324 DefaultGithubOneboxToken: migrating =========================
-- execute("DELETE FROM site_settings WHERE name = 'github_onebox_access_token'\n")
-> 0.0002s
== 20240712050324 DefaultGithubOneboxToken: migrated (0.0008s) ================
== 20240714231226 DuplicateFlagsCustomTypeToRequireMessage: migrating =========
-- add_column(:flags, :require_message, :boolean, {:default=>false, :null=>false})
-> 0.0007s
== 20240714231226 DuplicateFlagsCustomTypeToRequireMessage: migrated (0.0012s)
== 20240714231516 DropCustomTypeFromFlags: migrating ==========================
== 20240714231516 DropCustomTypeFromFlags: migrated (0.0015s) =================
== 20240715073605 AddSmtpSslModeToGroups: migrating ===========================
-- add_column(:groups, :smtp_ssl_mode, :integer, {:default=>0, :null=>false})
-> 0.0006s
-- execute("UPDATE groups SET smtp_ssl_mode = (CASE WHEN smtp_ssl THEN 2 ELSE 0 END)\n")
-> 0.0003s
== 20240715073605 AddSmtpSslModeToGroups: migrated (0.0049s) ==================
== 20240717053710 DropGroupsSmtpSsl: migrating ================================
== 20240717053710 DropGroupsSmtpSsl: migrated (0.0015s) =======================
== 20240717171840 RenameChatPreferredMobileIndexSetting: migrating ============
-- execute("UPDATE site_settings SET name = 'chat_preferred_index' WHERE name = 'chat_preferred_mobile_index'")
-> 0.0002s
== 20240717171840 RenameChatPreferredMobileIndexSetting: migrated (0.0006s) ===
== 20240722025822 AddUserIdToCustomEmojis: migrating ==========================
-- add_column(:custom_emojis, :user_id, :integer, {:null=>false, :default=>-1})
-> 0.0006s
== 20240722025822 AddUserIdToCustomEmojis: migrated (0.0010s) =================
== 20240723030506 AddPostIdIndexToUserHistories: migrating ====================
-- remove_index(:user_histories, :post_id, {:if_exists=>true})
-> 0.0027s
-- add_index(:user_histories, :post_id, {:algorithm=>:concurrently})
-> 0.0037s
== 20240723030506 AddPostIdIndexToUserHistories: migrated (0.0070s) ===========
== 20240724021732 AddLoginMethodToUserAuthTokens: migrating ===================
-- add_column(:user_auth_tokens, :authenticated_with_oauth, :boolean, {:default=>false})
-> 0.0006s
== 20240724021732 AddLoginMethodToUserAuthTokens: migrated (0.0010s) ==========
== 20240725042522 RemoveExperimentalFlagsAdminPageSiteSetting: migrating ======
-- execute("DELETE FROM site_settings WHERE name = 'experimental_flags_admin_page_enabled_groups'")
-> 0.0002s
== 20240725042522 RemoveExperimentalFlagsAdminPageSiteSetting: migrated (0.0005s)
== 20240729084803 CreateUserApiKeyClients: migrating ==========================
-- create_table(:user_api_key_clients)
-> 0.0059s
-- add_index(:user_api_key_clients, [:client_id], {:unique=>true})
-> 0.0024s
-- execute("INSERT INTO user_api_key_clients (client_id, application_name, created_at, updated_at)\n SELECT client_id, application_name, created_at, updated_at\n FROM user_api_keys")
-> 0.0005s
-- add_column(:user_api_keys, :user_api_key_client_id, :bigint, {:null=>true})
-> 0.0004s
-- add_index(:user_api_keys, :user_api_key_client_id)
-> 0.0024s
-- execute("UPDATE user_api_keys keys\n SET user_api_key_client_id = clients.id\n FROM user_api_key_clients clients\n WHERE clients.client_id = keys.client_id")
-> 0.0006s
-- change_column_null(:user_api_keys, :client_id, true)
-> 0.0003s
-- change_column_null(:user_api_keys, :application_name, true)
-> 0.0002s
== 20240729084803 CreateUserApiKeyClients: migrated (0.0133s) =================
== 20240731143458 RemoveChatDefaultChannelId: migrating =======================
-- execute("DELETE FROM site_settings WHERE name = 'chat_default_channel_id'")
-> 0.0002s
== 20240731143458 RemoveChatDefaultChannelId: migrated (0.0005s) ==============
== 20240731190511 UpdateInvalidAllowedIframeValues: migrating =================
== 20240731190511 UpdateInvalidAllowedIframeValues: migrated (0.0005s) ========
== 20240807024301 UpdateDeleteMergedStubTopicsAfterDaysSetting: migrating =====
-- execute("UPDATE site_settings SET value = '-1' WHERE name = 'delete_merged_stub_topics_after_days' AND value = '0'")
-> 0.0002s
== 20240807024301 UpdateDeleteMergedStubTopicsAfterDaysSetting: migrated (0.0005s)
== 20240815234500 RemoveGlimmerHeaderModeSetting: migrating ===================
-- execute("DELETE FROM site_settings\nWHERE name = 'glimmer_header_mode'\n")
-> 0.0002s
== 20240815234500 RemoveGlimmerHeaderModeSetting: migrated (0.0005s) ==========
== 20240818113758 RemoveAllButMostRecentUserPassword: migrating ===============
-- execute("DELETE FROM user_passwords WHERE id NOT IN ( SELECT DISTINCT ON (user_id) id FROM user_passwords ORDER BY user_id, password_expired_at DESC NULLS FIRST );")
-> 0.0006s
== 20240818113758 RemoveAllButMostRecentUserPassword: migrated (0.0010s) ======
== 20240819130737 UpdateUniqueIndexOnUserPasswords: migrating =================
-- remove_index(:user_passwords, [:user_id], {:unique=>true, :where=>"password_expired_at IS NULL", :algorithm=>:concurrently, :if_exists=>true})
-> 0.0078s
-- add_index(:user_passwords, [:user_id], {:unique=>true, :algorithm=>:concurrently, :if_not_exists=>true})
-> 0.0033s
== 20240819130737 UpdateUniqueIndexOnUserPasswords: migrated (0.0118s) ========
== 20240820123401 AlterNotificationsIdSequenceToBigint: migrating =============
-- execute("ALTER SEQUENCE notifications_id_seq AS bigint")
-> 0.0004s
== 20240820123401 AlterNotificationsIdSequenceToBigint: migrated (0.0008s) ====
== 20240820123402 AddBigIntNotificationsId: migrating =========================
-- execute("SELECT data_type FROM information_schema.columns WHERE table_name = 'notifications' AND column_name = 'id' LIMIT 1")
-> 0.0023s
-- execute("ALTER TABLE notifications ADD COLUMN new_id BIGINT NOT NULL DEFAULT 0")
-> 0.0005s
-- execute("CREATE FUNCTION mirror_notifications_id() RETURNS trigger AS $$ BEGIN NEW.new_id = NEW.id; RETURN NEW; END; $$ LANGUAGE plpgsql")
-> 0.0004s
-- execute("CREATE TRIGGER notifications_new_id_trigger BEFORE INSERT ON notifications FOR EACH ROW EXECUTE PROCEDURE mirror_notifications_id()")
-> 0.0003s
== 20240820123402 AddBigIntNotificationsId: migrated (0.0041s) ================
== 20240820123403 CopyNotificationsIdValues: migrating ========================
-- execute("SELECT data_type FROM information_schema.columns WHERE table_name = 'notifications' AND column_name = 'id' LIMIT 1")
-> 0.0021s
-- execute("SELECT MIN(id), MAX(id) FROM notifications")
-> 0.0010s
-- execute("UPDATE notifications\nSET new_id = id\nWHERE id >= 1 AND id < 10001 AND new_id != id\n")
-> 0.0142s
== 20240820123403 CopyNotificationsIdValues: migrated (0.0180s) ===============
== 20240820123404 CopyNotificationsIdIndexes: migrating =======================
-- execute("SELECT data_type FROM information_schema.columns WHERE table_name = 'notifications' AND column_name = 'id' LIMIT 1")
-> 0.0022s
-- execute("SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'notifications' AND indexdef SIMILAR TO '%\\mid\\M%' AND schemaname = 'public'")
-> 0.0028s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS notifications_pkey_bigint")
-> 0.0002s
-- execute("CREATE UNIQUE INDEX CONCURRENTLY notifications_pkey_bigint ON public.notifications USING btree (new_id)")
-> 0.0039s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_notifications_read_or_not_high_priority_bigint")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY index_notifications_read_or_not_high_priority_bigint ON public.notifications USING btree (user_id, new_id DESC, read, topic_id) WHERE (read OR (high_priority = false))")
-> 0.0034s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_notifications_unique_unread_high_priority_bigint")
-> 0.0002s
-- execute("CREATE UNIQUE INDEX CONCURRENTLY index_notifications_unique_unread_high_priority_bigint ON public.notifications USING btree (user_id, new_id) WHERE ((NOT read) AND (high_priority = true))")
-> 0.0029s
== 20240820123404 CopyNotificationsIdIndexes: migrated (0.0168s) ==============
== 20240820123405 SwapBigIntNotificationsId: migrating ========================
-- execute("SELECT data_type FROM information_schema.columns WHERE table_name = 'notifications' AND column_name = 'id' LIMIT 1")
-> 0.0020s
-- execute("DROP TRIGGER notifications_new_id_trigger ON notifications")
-> 0.0004s
-- execute("DROP FUNCTION mirror_notifications_id()")
-> 0.0003s
-- execute("ALTER TABLE notifications ALTER COLUMN id DROP DEFAULT")
-> 0.0003s
-- execute("ALTER TABLE notifications ALTER COLUMN new_id SET DEFAULT nextval('notifications_id_seq'::regclass)")
-> 0.0004s
-- execute("ALTER SEQUENCE notifications_id_seq OWNED BY notifications.new_id")
-> 0.0002s
-- execute("ALTER TABLE notifications RENAME COLUMN id TO old_id")
-> 0.0001s
-- execute("ALTER TABLE notifications RENAME COLUMN new_id TO id")
-> 0.0001s
-- execute("ALTER TABLE notifications DROP CONSTRAINT notifications_pkey")
-> 0.0003s
-- execute("ALTER TABLE notifications ADD CONSTRAINT notifications_pkey PRIMARY KEY USING INDEX notifications_pkey_bigint")
-> 0.0003s
-- execute("ALTER TABLE notifications ALTER COLUMN old_id DROP NOT NULL")
-> 0.0001s
== 20240820123405 SwapBigIntNotificationsId: migrated (0.0084s) ===============
== 20240820123406 DropOldNotificationIdIndexes: migrating =====================
-- execute("SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'notifications' AND indexdef SIMILAR TO '%\\mold_id\\M%'")
-> 0.0020s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_notifications_read_or_not_high_priority")
-> 0.0042s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_notifications_unique_unread_high_priority")
-> 0.0042s
-- execute("SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'notifications' AND indexdef SIMILAR TO '%\\mid\\M%' AND schemaname = 'public'")
-> 0.0020s
-- execute("ALTER INDEX index_notifications_read_or_not_high_priority_bigint RENAME TO index_notifications_read_or_not_high_priority")
-> 0.0003s
-- execute("ALTER INDEX index_notifications_unique_unread_high_priority_bigint RENAME TO index_notifications_unique_unread_high_priority")
-> 0.0002s
== 20240820123406 DropOldNotificationIdIndexes: migrated (0.0136s) ============
== 20240826121501 AddBigIntShelvedNotificationsNotificationId: migrating ======
-- execute("ALTER TABLE shelved_notifications ADD COLUMN new_notification_id BIGINT NOT NULL DEFAULT 0")
-> 0.0005s
-- execute("CREATE FUNCTION mirror_user_badges_notification_id() RETURNS trigger AS $$ BEGIN NEW.new_notification_id = NEW.notification_id; RETURN NEW; END; $$ LANGUAGE plpgsql")
-> 0.0003s
-- execute("CREATE TRIGGER user_badges_new_notification_id_trigger BEFORE INSERT ON shelved_notifications FOR EACH ROW EXECUTE PROCEDURE mirror_user_badges_notification_id()")
-> 0.0003s
== 20240826121501 AddBigIntShelvedNotificationsNotificationId: migrated (0.0015s)
== 20240826121502 CopyShelvedNotificationsNotificationIdValues: migrating =====
-- execute("SELECT MIN(id), MAX(id) FROM shelved_notifications")
-> 0.0005s
== 20240826121502 CopyShelvedNotificationsNotificationIdValues: migrated (0.0009s)
== 20240826121503 CopyShelvedNotificationsNotificationIdIndexes: migrating ====
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_shelved_notifications_on_new_notification_id")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY index_shelved_notifications_on_new_notification_id ON shelved_notifications (new_notification_id)")
-> 0.0031s
== 20240826121503 CopyShelvedNotificationsNotificationIdIndexes: migrated (0.0038s)
== 20240826121504 SwapBigIntShelvedNotificationsNotificationId: migrating =====
-- execute("DROP TRIGGER user_badges_new_notification_id_trigger ON shelved_notifications")
-> 0.0003s
-- execute("DROP FUNCTION mirror_user_badges_notification_id()")
-> 0.0002s
-- execute("ALTER TABLE shelved_notifications ALTER COLUMN new_notification_id DROP DEFAULT")
-> 0.0002s
-- execute("ALTER TABLE shelved_notifications RENAME COLUMN notification_id TO old_notification_id")
-> 0.0002s
-- execute("ALTER TABLE shelved_notifications RENAME COLUMN new_notification_id TO notification_id")
-> 0.0001s
-- execute("ALTER TABLE shelved_notifications ALTER COLUMN old_notification_id DROP NOT NULL")
-> 0.0001s
-- execute("DROP INDEX IF EXISTS index_shelved_notifications_on_notification_id")
-> 0.0003s
-- execute("ALTER INDEX index_shelved_notifications_on_new_notification_id RENAME TO index_shelved_notifications_on_notification_id")
-> 0.0002s
== 20240826121504 SwapBigIntShelvedNotificationsNotificationId: migrated (0.0054s)
== 20240826121505 AddBigIntUserBadgesNotificationId: migrating ================
-- execute("ALTER TABLE user_badges ADD COLUMN new_notification_id BIGINT")
-> 0.0004s
-- execute("CREATE FUNCTION mirror_user_badges_notification_id() RETURNS trigger AS $$ BEGIN NEW.new_notification_id = NEW.notification_id; RETURN NEW; END; $$ LANGUAGE plpgsql")
-> 0.0003s
-- execute("CREATE TRIGGER user_badges_new_notification_id_trigger BEFORE INSERT ON user_badges FOR EACH ROW EXECUTE PROCEDURE mirror_user_badges_notification_id()")
-> 0.0003s
== 20240826121505 AddBigIntUserBadgesNotificationId: migrated (0.0015s) =======
== 20240826121506 CopyUserBadgesNotificationIdValues: migrating ===============
-- execute("SELECT MIN(id), MAX(id) FROM user_badges")
-> 0.0008s
-- execute("UPDATE user_badges SET new_notification_id = notification_id WHERE id >= 1 AND id < 10001 AND notification_id IS NOT NULL AND new_notification_id IS NULL")
-> 0.0037s
== 20240826121506 CopyUserBadgesNotificationIdValues: migrated (0.0051s) ======
== 20240826121507 SwapBigIntUserBadgesNotificationId: migrating ===============
-- execute("DROP TRIGGER user_badges_new_notification_id_trigger ON user_badges")
-> 0.0003s
-- execute("DROP FUNCTION mirror_user_badges_notification_id()")
-> 0.0002s
-- execute("ALTER TABLE user_badges RENAME COLUMN notification_id TO old_notification_id")
-> 0.0002s
-- execute("ALTER TABLE user_badges RENAME COLUMN new_notification_id TO notification_id")
-> 0.0001s
== 20240826121507 SwapBigIntUserBadgesNotificationId: migrated (0.0047s) ======
== 20240827040131 AddNewNotificationIdToChatMentionNotifications: migrating ===
-- execute("ALTER TABLE chat_mention_notifications ADD COLUMN new_notification_id BIGINT NOT NULL DEFAULT(0)")
-> 0.0004s
-- execute("CREATE FUNCTION mirror_chat_mention_notifications_notification_id()\nRETURNS trigger AS\n$$\nBEGIN\n NEW.new_notification_id = NEW.notification_id;\n RETURN NEW;\nEND;\n$$\nLANGUAGE plpgsql\n")
-> 0.0002s
-- execute("CREATE TRIGGER chat_mention_notifications_new_notification_id_trigger BEFORE INSERT ON chat_mention_notifications\nFOR EACH ROW EXECUTE PROCEDURE mirror_chat_mention_notifications_notification_id()\n")
-> 0.0002s
== 20240827040131 AddNewNotificationIdToChatMentionNotifications: migrated (0.0012s)
== 20240827040550 CopyChatMentionNotificationsNotificationIdValues: migrating =
-- execute("SELECT MIN(notification_id), MAX(notification_id) FROM chat_mention_notifications")
-> 0.0004s
== 20240827040550 CopyChatMentionNotificationsNotificationIdValues: migrated (0.0008s)
== 20240827040810 CopyChatMentionNotificationsNotificationIdIndexes: migrating
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_chat_mention_notifications_on_new_notification_id")
-> 0.0002s
-- execute("CREATE UNIQUE INDEX CONCURRENTLY index_chat_mention_notifications_on_new_notification_id ON chat_mention_notifications (new_notification_id)")
-> 0.0031s
== 20240827040810 CopyChatMentionNotificationsNotificationIdIndexes: migrated (0.0037s)
== 20240827040811 SwapBigintChatMentionNotificationsNotificationId: migrating =
-- execute("DROP TRIGGER chat_mention_notifications_new_notification_id_trigger ON chat_mention_notifications")
-> 0.0003s
-- execute("DROP FUNCTION mirror_chat_mention_notifications_notification_id()")
-> 0.0002s
-- execute("ALTER TABLE chat_mention_notifications RENAME COLUMN notification_id TO old_notification_id")
-> 0.0001s
-- execute("ALTER TABLE chat_mention_notifications RENAME COLUMN new_notification_id TO notification_id")
-> 0.0001s
-- execute("DROP INDEX index_chat_mention_notifications_on_notification_id")
-> 0.0002s
-- execute("ALTER INDEX index_chat_mention_notifications_on_new_notification_id RENAME TO index_chat_mention_notifications_on_notification_id")
-> 0.0001s
-- execute("ALTER TABLE chat_mention_notifications ALTER COLUMN old_notification_id DROP NOT NULL")
-> 0.0002s
-- execute("ALTER TABLE chat_mention_notifications ALTER COLUMN notification_id DROP DEFAULT")
-> 0.0002s
== 20240827040811 SwapBigintChatMentionNotificationsNotificationId: migrated (0.0052s)
== 20240827063715 AddNewSeenNotificationIdToUsers: migrating ==================
-- execute("ALTER TABLE users ADD COLUMN new_seen_notification_id BIGINT NOT NULL DEFAULT(0)")
-> 0.0006s
-- execute("CREATE FUNCTION mirror_users_seen_notification_id() RETURNS trigger AS $$ BEGIN NEW.new_seen_notification_id = NEW.seen_notification_id; RETURN NEW; END; $$ LANGUAGE plpgsql")
-> 0.0003s
-- execute("CREATE TRIGGER users_seen_notification_id_trigger BEFORE INSERT OR UPDATE ON users FOR EACH ROW EXECUTE PROCEDURE mirror_users_seen_notification_id()")
-> 0.0002s
== 20240827063715 AddNewSeenNotificationIdToUsers: migrated (0.0016s) =========
== 20240827063908 CopyUsersSeenNotificationIdValues: migrating ================
-- execute("SELECT MIN(id), MAX(id) FROM users")
-> 0.0005s
-- execute("UPDATE users SET new_seen_notification_id = seen_notification_id WHERE id >= -2 AND id < 9998 AND new_seen_notification_id != seen_notification_id")
-> 0.0016s
== 20240827063908 CopyUsersSeenNotificationIdValues: migrated (0.0026s) =======
== 20240827064121 SwapSeenNotificationIdWithSeenNotificationIdOnUsers: migrating
-- execute("DROP TRIGGER users_seen_notification_id_trigger ON users")
-> 0.0002s
-- execute("DROP FUNCTION mirror_users_seen_notification_id()")
-> 0.0001s
-- execute("ALTER TABLE users RENAME COLUMN seen_notification_id TO old_seen_notification_id")
-> 0.0002s
-- execute("ALTER TABLE users RENAME COLUMN new_seen_notification_id TO seen_notification_id")
-> 0.0001s
-- execute("ALTER TABLE users ALTER COLUMN old_seen_notification_id DROP NOT NULL")
-> 0.0002s
-- execute("ALTER TABLE users ALTER COLUMN old_seen_notification_id DROP DEFAULT")
-> 0.0002s
== 20240827064121 SwapSeenNotificationIdWithSeenNotificationIdOnUsers: migrated (0.0047s)
== 20240828191047 CreateCategoryModerationGroups: migrating ===================
-- create_table(:category_moderation_groups)
-> 0.0041s
-- add_index(:category_moderation_groups, [:category_id, :group_id], {:unique=>true})
-> 0.0026s
-- execute("INSERT INTO category_moderation_groups (category_id, group_id, created_at, updated_at)\nSELECT id, reviewable_by_group_id, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP\nFROM categories\nWHERE reviewable_by_group_id IS NOT NULL\n")
-> 0.0004s
== 20240828191047 CreateCategoryModerationGroups: migrated (0.0076s) ==========
== 20240829083823 EnsureUniqueTagUserNotificationLevel: migrating =============
-- execute(" DELETE FROM tag_users\n USING tag_users AS dupe\n WHERE tag_users.id > dupe.id\n AND tag_users.user_id = dupe.user_id\n AND tag_users.tag_id = dupe.tag_id;\n")
-> 0.0006s
-- add_index(:tag_users, [:user_id, :tag_id], {:unique=>true})
-> 0.0027s
== 20240829083823 EnsureUniqueTagUserNotificationLevel: migrated (0.0037s) ====
== 20240829140226 DropOldNotificationIdColumns: migrating =====================
== 20240829140226 DropOldNotificationIdColumns: migrated (0.0044s) ============
== 20240829140227 DropChatMentionNotificationsOldIdColumn: migrating ==========
== 20240829140227 DropChatMentionNotificationsOldIdColumn: migrated (0.0014s) =
== 20240903024157 RemoveUserPasswordsIndexes: migrating =======================
-- remove_index(:user_passwords, [:user_id, :password_hash], {:unique=>true})
-> 0.0023s
-- remove_index(:user_passwords, [:user_id, :password_expired_at, :password_hash], {:name=>"idx_user_passwords_on_user_id_and_expired_at_and_hash"})
-> 0.0020s
== 20240903024157 RemoveUserPasswordsIndexes: migrated (0.0047s) ==============
== 20240903024211 AddTriggerToUsersToSyncUserPasswords: migrating =============
-- execute("DROP TRIGGER IF EXISTS users_password_sync ON users;")
-> 0.0003s
-- execute("CREATE OR REPLACE FUNCTION mirror_user_password_data() RETURNS TRIGGER AS $$ BEGIN INSERT INTO user_passwords (user_id, password_hash, password_salt, password_algorithm, password_expired_at, created_at, updated_at) VALUES (NEW.id, NEW.password_hash, NEW.salt, NEW.password_algorithm, NULL, now(), now()) ON CONFLICT(user_id) DO UPDATE SET password_hash = EXCLUDED.password_hash, password_salt = EXCLUDED.password_salt, password_algorithm = EXCLUDED.password_algorithm, password_expired_at = EXCLUDED.password_expired_at, updated_at = now() WHERE user_passwords.password_hash <> EXCLUDED.password_hash; RETURN NEW; END; $$ LANGUAGE plpgsql;")
-> 0.0004s
-- execute("CREATE TRIGGER users_password_sync AFTER INSERT OR UPDATE OF password_hash ON users FOR EACH ROW WHEN (NEW.password_hash IS NOT NULL) EXECUTE PROCEDURE mirror_user_password_data();")
-> 0.0003s
-- execute("DROP TRIGGER IF EXISTS users_password_sync_on_delete_password ON users;")
-> 0.0001s
-- execute("CREATE OR REPLACE FUNCTION delete_user_password() RETURNS TRIGGER AS $$ BEGIN DELETE FROM user_passwords WHERE user_id = NEW.id; RETURN NEW; END; $$ LANGUAGE plpgsql;")
-> 0.0003s
-- execute("CREATE TRIGGER users_password_sync_on_delete_password AFTER UPDATE OF password_hash ON users FOR EACH ROW WHEN (NEW.password_hash IS NULL) EXECUTE PROCEDURE delete_user_password();")
-> 0.0002s
== 20240903024211 AddTriggerToUsersToSyncUserPasswords: migrated (0.0022s) ====
== 20240903024311 BackfillUserPasswordsFromUsers: migrating ===================
-- execute("INSERT INTO user_passwords (user_id, password_hash, password_salt, password_algorithm, password_expired_at, created_at, updated_at)\nSELECT id, password_hash, salt, password_algorithm, NULL, now(), now()\nFROM users\nWHERE id >= -2 AND id < 49998 AND password_hash IS NOT NULL AND salt IS NOT NULL AND password_algorithm IS NOT NULL\nON CONFLICT (user_id) DO UPDATE SET\n password_hash = EXCLUDED.password_hash,\n password_salt = EXCLUDED.password_salt,\n password_algorithm = EXCLUDED.password_algorithm,\n password_expired_at = EXCLUDED.password_expired_at,\n updated_at = now()\nWHERE user_passwords.password_hash <> EXCLUDED.password_hash\n")
-> 0.0019s
== 20240903024311 BackfillUserPasswordsFromUsers: migrated (0.0031s) ==========
== 20240906142121 MigrateFieldsFromGroupToGroups: migrating ===================
-- execute(" UPDATE discourse_automation_fields\n SET\n metadata = '{}'::jsonb\n WHERE\n metadata = '{\"value\": [null]}'::jsonb\n AND component = 'groups'\n AND name = 'restricted_groups';\n")
-> 0.0003s
-- execute(" UPDATE discourse_automation_fields\n SET\n component = 'groups',\n name = 'restricted_groups',\n metadata = CASE\n WHEN metadata != '{}'::jsonb THEN jsonb_set(metadata, '{value}', to_jsonb(ARRAY[(metadata->>'value')::int]))\n ELSE metadata\n END\n FROM discourse_automation_automations\n WHERE discourse_automation_fields.automation_id = discourse_automation_automations.id\n AND discourse_automation_automations.trigger = 'post_created_edited'\n AND discourse_automation_fields.name = 'restricted_group'\n AND discourse_automation_fields.component = 'group';\n")
-> 0.0004s
== 20240906142121 MigrateFieldsFromGroupToGroups: migrated (0.0012s) ==========
== 20240906233304 RemoveLimitsFromFormTemplates: migrating ====================
-- change_column(:form_templates, :name, :string, {:limit=>nil})
-> 0.0008s
-- change_column(:form_templates, :template, :text, {:limit=>nil})
-> 0.0003s
== 20240906233304 RemoveLimitsFromFormTemplates: migrated (0.0015s) ===========
== 20240909121255 RebakeUserOnebox: migrating =================================
-- execute("UPDATE posts SET baked_version = 0\nWHERE cooked LIKE '%d-icon-map-marker-alt%'\n")
-> 0.0019s
== 20240909121255 RebakeUserOnebox: migrated (0.0023s) ========================
== 20240910090759 MakePasswordColumnsFromUsersReadOnly: migrating =============
-- execute("DROP TRIGGER IF EXISTS users_password_sync_on_delete_password ON users;\n")
-> 0.0002s
-- execute("DROP FUNCTION IF EXISTS delete_user_password;\n")
-> 0.0002s
-- execute("DROP TRIGGER IF EXISTS users_password_sync ON users;\n")
-> 0.0002s
-- execute("DROP FUNCTION IF EXISTS mirror_user_password_data;\n")
-> 0.0001s
== 20240910090759 MakePasswordColumnsFromUsersReadOnly: migrated (0.0108s) ====
== 20240912061702 DropUserSearchSimilarResultsSiteSetting: migrating ==========
-- execute("DELETE FROM site_settings WHERE name = 'user_search_similar_results';\n")
-> 0.0002s
== 20240912061702 DropUserSearchSimilarResultsSiteSetting: migrated (0.0006s) =
== 20240912061806 DropTrgmIndexesOnUsers: migrating ===========================
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_users_on_username_lower_trgm;\n")
-> 0.0044s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_users_on_name_trgm;\n")
-> 0.0041s
== 20240912061806 DropTrgmIndexesOnUsers: migrated (0.0092s) ==================
== 20240912210450 DeleteAnonymousUsersFromDirectoryItems: migrating ===========
== 20240912210450 DeleteAnonymousUsersFromDirectoryItems: migrated (0.0014s) ==
== 20240912212253 IncreaseExternalAvatarUrlLimitTo2000: migrating =============
-- change_column(:single_sign_on_records, :external_avatar_url, :string, {:limit=>2000})
-> 0.0004s
== 20240912212253 IncreaseExternalAvatarUrlLimitTo2000: migrated (0.0008s) ====
== 20241003122030 AddNotificationLevelToUserChatChannelMemberships: migrating =
-- execute("DROP INDEX CONCURRENTLY IF EXISTS user_chat_channel_memberships_index\n")
-> 0.0043s
-- add_column(:user_chat_channel_memberships, :notification_level, :integer, {:null=>true})
-> 0.0005s
-- execute("SELECT MIN(id), MAX(id) FROM user_chat_channel_memberships")
-> 0.0005s
-- change_column_default(:user_chat_channel_memberships, :notification_level, 1)
-> 0.0018s
-- change_column_null(:user_chat_channel_memberships, :notification_level, false)
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY user_chat_channel_memberships_index ON user_chat_channel_memberships using btree (user_id, chat_channel_id, notification_level, following)\n")
-> 0.0036s
== 20241003122030 AddNotificationLevelToUserChatChannelMemberships: migrated (0.0116s)
== 20241010155139 AlterAutomationIdsToBigint: migrating =======================
-- change_column(:discourse_automation_fields, :automation_id, :bigint)
-> 0.0061s
-- change_column(:discourse_automation_pending_automations, :automation_id, :bigint)
-> 0.0033s
-- change_column(:discourse_automation_pending_pms, :automation_id, :bigint)
-> 0.0062s
== 20241010155139 AlterAutomationIdsToBigint: migrated (0.0162s) ==============
== 20241011033602 AddPostBadgesToThemeModifiers: migrating ====================
-- add_column(:theme_modifier_sets, :serialize_post_user_badges, :string, {:array=>true})
-> 0.0005s
-- add_column(:theme_modifier_sets, :theme_setting_modifiers, :jsonb)
-> 0.0003s
== 20241011033602 AddPostBadgesToThemeModifiers: migrated (0.0013s) ===========
== 20241011054348 FixUniqueConstraintOnProblemCheckTrackers: migrating ========
-- remove_index(:problem_check_trackers, [:identifier, :target], {:if_exists=>true})
-> 0.0031s
-- execute("DELETE FROM problem_check_trackers\nWHERE id IN(\n SELECT pct1.id\n FROM problem_check_trackers pct1\n JOIN problem_check_trackers pct2\n ON pct1.identifier = pct2.identifier\n AND pct1.target IS NULL\n AND pct2.target IS NULL\n WHERE pct1.id > pct2.id\n)\n")
-> 0.0005s
-- add_index(:problem_check_trackers, [:identifier, :target], {:unique=>true, :nulls_not_distinct=>true})
-> 0.0165s
== 20241011054348 FixUniqueConstraintOnProblemCheckTrackers: migrated (0.0208s)
== 20241011080517 DropPasswordColumnsFromUsers: migrating =====================
== 20241011080517 DropPasswordColumnsFromUsers: migrated (0.0036s) ============
== 20241016174732 RemoveNameRequirementFromAutomations: migrating =============
-- change_column_null(:discourse_automation_automations, :name, true)
-> 0.0003s
== 20241016174732 RemoveNameRequirementFromAutomations: migrated (0.0007s) ====
== 20241018031851 AddDefaultValueToProblemCheckTrackersTarget: migrating ======
-- change_column_default(:problem_check_trackers, :target, "__NULL__")
-> 0.0016s
-- execute("UPDATE problem_check_trackers\nSET target='__NULL__'\nWHERE target IS NULL\n")
-> 0.0003s
== 20241018031851 AddDefaultValueToProblemCheckTrackersTarget: migrated (0.0024s)
== 20241022022326 RemoveNullsNotDistinctFromProblemCheckTrackers: migrating ===
-- remove_index(:problem_check_trackers, [:identifier, :target], {:if_exists=>true})
-> 0.0026s
-- add_index(:problem_check_trackers, [:identifier, :target], {:unique=>true})
-> 0.0031s
== 20241022022326 RemoveNullsNotDistinctFromProblemCheckTrackers: migrated (0.0062s)
== 20241023041126 ClearDuplicateAdminNotices: migrating =======================
== 20241023041126 ClearDuplicateAdminNotices: migrated (0.0010s) ==============
== 20241024093027 RemoveCategoryExpertsWebHookEventTypes: migrating ===========
-- execute("DELETE FROM web_hook_event_types WHERE (name, id) IN (('category_experts_approved', 1901), ('category_experts_unapproved', 1902))")
-> 0.0002s
== 20241024093027 RemoveCategoryExpertsWebHookEventTypes: migrated (0.0006s) ==
== 20241024102733 RemoveExperimentalRedesignedAboutPageGroupsSetting: migrating
-- execute("DELETE FROM site_settings\nWHERE name = 'experimental_redesigned_about_page_groups'\n")
-> 0.0002s
== 20241024102733 RemoveExperimentalRedesignedAboutPageGroupsSetting: migrated (0.0006s)
== 20241025045928 AddInvitesLinkToSidebar: migrating ==========================
== 20241025045928 AddInvitesLinkToSidebar: migrated (0.0027s) =================
== 20241028021339 AddSmartListUserPreference: migrating =======================
-- add_column(:user_options, :enable_smart_lists, :boolean, {:default=>true, :null=>false})
-> 0.0008s
== 20241028021339 AddSmartListUserPreference: migrated (0.0012s) ==============
== 20241029192512 AlterChatIdsToBigint: migrating =============================
-- change_column(:chat_channel_archives, :chat_channel_id, :bigint)
-> 0.0084s
-- change_column(:chat_channels, :chatable_id, :bigint)
-> 0.0179s
-- change_column(:chat_drafts, :chat_channel_id, :bigint)
-> 0.0054s
-- change_column(:chat_mention_notifications, :chat_mention_id, :bigint)
-> 0.0049s
-- change_column(:chat_mention_notifications, :notification_id, :bigint)
-> 0.0007s
-- change_column(:chat_mentions, :chat_message_id, :bigint)
-> 0.0089s
-- change_column(:chat_message_reactions, :chat_message_id, :bigint)
-> 0.0078s
-- change_column(:chat_message_revisions, :chat_message_id, :bigint)
-> 0.0097s
-- change_column(:chat_messages, :chat_channel_id, :bigint)
-> 0.0153s
-- change_column(:chat_messages, :in_reply_to_id, :bigint)
-> 0.0150s
-- change_column(:chat_webhook_events, :chat_message_id, :bigint)
-> 0.0053s
-- change_column(:chat_webhook_events, :incoming_chat_webhook_id, :bigint)
-> 0.0053s
-- change_column(:direct_message_users, :direct_message_channel_id, :bigint)
-> 0.0052s
-- change_column(:incoming_chat_webhooks, :chat_channel_id, :bigint)
-> 0.0078s
-- change_column(:user_chat_channel_memberships, :chat_channel_id, :bigint)
-> 0.0102s
-- change_column(:user_chat_channel_memberships, :last_read_message_id, :bigint)
-> 0.0080s
-- change_column(:user_chat_channel_memberships, :last_unread_mention_when_emailed_id, :bigint)
-> 0.0084s
== 20241029192512 AlterChatIdsToBigint: migrated (0.1455s) ====================
== 20241030210727 SplitHideProfileAndPresence: migrating ======================
-- execute("SELECT value, data_type FROM site_settings WHERE name = 'default_hide_profile_and_presence' LIMIT 1")
-> 0.0003s
-- execute("ALTER TABLE user_options ADD COLUMN hide_profile BOOLEAN DEFAULT FALSE NOT NULL")
-> 0.0006s
-- execute("ALTER TABLE user_options ADD COLUMN hide_presence BOOLEAN DEFAULT FALSE NOT NULL")
-> 0.0004s
-- execute(" UPDATE user_options\n SET hide_profile = hide_profile_and_presence,\n hide_presence = hide_profile_and_presence\n WHERE hide_profile_and_presence;\n")
-> 0.0003s
== 20241030210727 SplitHideProfileAndPresence: migrated (0.0021s) =============
== 20241031050638 AddCustomFieldsToChat: migrating ============================
-- create_table(:chat_thread_custom_fields)
-> 0.0066s
-- create_table(:chat_message_custom_fields)
-> 0.0060s
-- create_table(:chat_channel_custom_fields)
-> 0.0061s
-- add_index(:chat_thread_custom_fields, [:thread_id, :name], {:unique=>true})
-> 0.0028s
-- add_index(:chat_message_custom_fields, [:message_id, :name], {:unique=>true})
-> 0.0027s
-- add_index(:chat_channel_custom_fields, [:channel_id, :name], {:unique=>true})
-> 0.0029s
== 20241031050638 AddCustomFieldsToChat: migrated (0.0281s) ===================
== 20241101141701 AlterBookmarksIdsToBigint: migrating ========================
-- change_column(:bookmarks, :bookmarkable_id, :bigint)
-> 0.0151s
== 20241101141701 AlterBookmarksIdsToBigint: migrated (0.0157s) ===============
== 20241104053309 AddIconUploadIdToChatChannel: migrating =====================
-- add_column(:chat_channels, :icon_upload_id, :integer)
-> 0.0005s
== 20241104053309 AddIconUploadIdToChatChannel: migrated (0.0010s) ============
== 20241104132424 RenameFullPageSiteSetting: migrating ========================
-- execute("UPDATE site_settings SET name = 'full_page_login' where name = 'experimental_full_page_login'")
-> 0.0002s
== 20241104132424 RenameFullPageSiteSetting: migrated (0.0006s) ===============
== 20241105211601 DeleteZeroRankUserVoteCollectionsFromPollVotes: migrating ===
-- execute("DELETE FROM poll_votes\nWHERE (poll_id, user_id) IN (\n SELECT poll_votes.poll_id, poll_votes.user_id\n FROM poll_votes\n JOIN polls ON polls.id = poll_votes.poll_id\n WHERE polls.type = 3\n GROUP BY poll_votes.poll_id, poll_votes.user_id\n HAVING SUM(poll_votes.rank) = 0\n);\n")
-> 0.0006s
== 20241105211601 DeleteZeroRankUserVoteCollectionsFromPollVotes: migrated (0.0010s)
== 20241108154026 CreateMovedPosts: migrating =================================
-- create_table(:moved_posts)
-> 0.0174s
== 20241108154026 CreateMovedPosts: migrated (0.0179s) ========================
== 20241110120303 AddBlocksToChatMessages: migrating ==========================
-- add_column(:chat_messages, :blocks, :jsonb, {:null=>true, :default=>nil})
-> 0.0007s
== 20241110120303 AddBlocksToChatMessages: migrated (0.0011s) =================
== 20241111022618 CreateChatMessageInteractions: migrating ====================
-- create_table(:chat_message_interactions, {:id=>:bigint})
-> 0.0059s
-- add_index(:chat_message_interactions, :user_id)
-> 0.0022s
-- add_index(:chat_message_interactions, :chat_message_id)
-> 0.0023s
== 20241111022618 CreateChatMessageInteractions: migrated (0.0110s) ===========
== 20241112124552 CreateUserApiKeyClientScopes: migrating =====================
-- create_table(:user_api_key_client_scopes)
-> 0.0035s
== 20241112124552 CreateUserApiKeyClientScopes: migrated (0.0041s) ============
== 20241112145744 AnonymizeNormalizedEmailColumn: migrating ===================
-- execute("UPDATE user_emails\nSET normalized_email = email\nWHERE SPLIT_PART(email, '@', 2) = 'anonymized.invalid'\n")
-> 0.0004s
== 20241112145744 AnonymizeNormalizedEmailColumn: migrated (0.0007s) ==========
== 20241120182858 AddIndexToChatMessagesOnChatChannelId: migrating ============
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_chat_messages_on_chat_channel_id_and_id\n")
-> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY index_chat_messages_on_chat_channel_id_and_id\nON chat_messages (chat_channel_id,id)\nWHERE deleted_at IS NOT NULL\n")
-> 0.0029s
== 20241120182858 AddIndexToChatMessagesOnChatChannelId: migrated (0.0036s) ===
== 20241121000131 AddPostHeaderToBadge: migrating =============================
-- add_column(:badges, :show_in_post_header, :boolean, {:default=>false, :null=>false})
-> 0.0008s
== 20241121000131 AddPostHeaderToBadge: migrated (0.0012s) ====================
== 20241127034553 AddPotentiallyIllegalToReviewables: migrating ===============
-- add_column(:reviewables, :potentially_illegal, :boolean)
-> 0.0003s
-- change_column_default(:reviewables, :potentially_illegal, false)
-> 0.0020s
== 20241127034553 AddPotentiallyIllegalToReviewables: migrated (0.0029s) ======
== 20241127072350 RemapFa5IconNamesToFa6: migrating ===========================
== 20241127072350 RemapFa5IconNamesToFa6: migrated (0.0004s) ==================
== 20241204085540 RemapToFa6IconNames: migrating ==============================
-- execute("SELECT value FROM site_settings WHERE name = 'svg_icon_subset'")
-> 0.0002s
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon FROM (VALUES ('adjust', 'circle-half-stroke'), ('air-freshener', 'spray-can-sparkles'), ('alien-monster', 'alien-8bit'), ('allergies', 'hand-dots'), ('ambulance', 'truck-medical'), ('american-sign-language-interpreting', 'hands-asl-interpreting'), ('analytics', 'chart-mixed'), ('angle-double-down', 'angles-down'), ('angle-double-left', 'angles-left'), ('angle-double-right', 'angles-right'), ('angle-double-up', 'angles-up'), ('angry', 'face-angry'), ('apple-alt', 'apple-whole'), ('apple-crate', 'crate-apple'), ('archive', 'box-archive'), ('arrow-alt-circle-down', 'circle-down'), ('arrow-alt-circle-left', 'circle-left'), ('arrow-alt-circle-right', 'circle-right'), ('arrow-alt-circle-up', 'circle-up'), ('arrow-alt-down', 'down'), ('arrow-alt-from-bottom', 'up-from-line'), ('arrow-alt-from-left', 'right-from-line'), ('arrow-alt-from-right', 'left-from-line'), ('arrow-alt-from-top', 'down-from-line'), ('arrow-alt-left', 'left'), ('arrow-alt-right', 'right'), ('arrow-alt-square-down', 'square-down'), ('arrow-alt-square-left', 'square-left'), ('arrow-alt-square-right', 'square-right'), ('arrow-alt-square-up', 'square-up'), ('arrow-alt-to-bottom', 'down-to-line'), ('arrow-alt-to-left', 'left-to-line'), ('arrow-alt-to-right', 'right-to-line'), ('arrow-alt-to-top', 'up-to-line'), ('arrow-alt-up', 'up'), ('arrow-circle-down', 'circle-arrow-down'), ('arrow-circle-left', 'circle-arrow-left'), ('arrow-circle-right', 'circle-arrow-right'), ('arrow-circle-up', 'circle-arrow-up'), ('arrow-from-bottom', 'arrow-up-from-line'), ('arrow-from-left', 'arrow-right-from-line'), ('arrow-from-right', 'arrow-left-from-line'), ('arrow-from-top', 'arrow-down-from-line'), ('arrow-square-down', 'square-arrow-down'), ('arrow-square-left', 'square-arrow-left'), ('arrow-square-right', 'square-arrow-right'), ('arrow-square-up', 'square-arrow-up'), ('arrow-to-bottom', 'arrow-down-to-line'), ('arrow-to-left', 'arrow-left-to-line'), ('arrow-to-right', 'arrow-right-to-line'), ('arrow-to-top', 'arrow-up-to-line'), ('arrows', 'arrows-up-down-left-right'), ('arrows-alt', 'up-down-left-right'), ('arrows-alt-h', 'left-right'), ('arrows-alt-v', 'up-down'), ('arrows-h', 'arrows-left-right'), ('arrows-v', 'arrows-up-down'), ('assistive-listening-systems', 'ear-listen'), ('atlas', 'book-atlas'), ('atom-alt', 'atom-simple'), ('backspace', 'delete-left'), ('balance-scale', 'scale-balanced'), ('balance-scale-left', 'scale-unbalanced'), ('balance-scale-right', 'scale-unbalanced-flip'), ('band-aid', 'bandage'), ('barcode-alt', 'rectangle-barcode'), ('baseball-ball', 'baseball'), ('basketball-ball', 'basketball'), ('bed-alt', 'bed-front'), ('beer', 'beer-mug-empty'), ('betamax', 'cassette-betamax'), ('bible', 'book-bible'), ('biking', 'person-biking'), ('biking-mountain', 'person-biking-mountain'), ('birthday-cake', 'cake-candles'), ('blind', 'person-walking-with-cane'), ('book-alt', 'book-blank'), ('book-dead', 'book-skull'), ('book-reader', 'book-open-reader'), ('book-spells', 'book-sparkles'), ('border-style', 'border-top-left'), ('border-style-alt', 'border-bottom-right'), ('box-alt', 'box-taped'), ('box-fragile', 'square-fragile'), ('box-full', 'box-open-full'), ('box-up', 'square-this-way-up'), ('box-usd', 'box-dollar'), ('boxes', 'boxes-stacked'), ('boxes-alt', 'boxes-stacked'), ('brackets', 'brackets-square'), ('broadcast-tower', 'tower-broadcast'), ('burn', 'fire-flame-simple'), ('bus-alt', 'bus-simple'), ('calculator-alt', 'calculator-simple'), ('calendar-alt', 'calendar-days'), ('calendar-edit', 'calendar-pen'), ('calendar-times', 'calendar-xmark'), ('camera-alt', 'camera'), ('camera-home', 'camera-security'), ('car-alt', 'car-rear'), ('car-crash', 'car-burst'), ('car-mechanic', 'car-wrench'), ('caravan-alt', 'caravan-simple'), ('caret-circle-down', 'circle-caret-down'), ('caret-circle-left', 'circle-caret-left'), ('caret-circle-right', 'circle-caret-right'), ('caret-circle-up', 'circle-caret-up'), ('caret-square-down', 'square-caret-down'), ('caret-square-left', 'square-caret-left'), ('caret-square-right', 'square-caret-right'), ('caret-square-up', 'square-caret-up'), ('cctv', 'camera-cctv'), ('chalkboard-teacher', 'chalkboard-user'), ('chart-pie-alt', 'chart-pie-simple'), ('check-circle', 'circle-check'), ('check-square', 'square-check'), ('cheeseburger', 'burger-cheese'), ('chess-bishop-alt', 'chess-bishop-piece'), ('chess-clock-alt', 'chess-clock-flip'), ('chess-king-alt', 'chess-king-piece'), ('chess-knight-alt', 'chess-knight-piece'), ('chess-pawn-alt', 'chess-pawn-piece'), ('chess-queen-alt', 'chess-queen-piece'), ('chess-rook-alt', 'chess-rook-piece'), ('chevron-circle-down', 'circle-chevron-down'), ('chevron-circle-left', 'circle-chevron-left'), ('chevron-circle-right', 'circle-chevron-right'), ('chevron-circle-up', 'circle-chevron-up'), ('chevron-double-down', 'chevrons-down'), ('chevron-double-left', 'chevrons-left'), ('chevron-double-right', 'chevrons-right'), ('chevron-double-up', 'chevrons-up'), ('chevron-square-down', 'square-chevron-down'), ('chevron-square-left', 'square-chevron-left'), ('chevron-square-right', 'square-chevron-right'), ('chevron-square-up', 'square-chevron-up'), ('clinic-medical', 'house-chimney-medical'), ('cloud-download', 'cloud-arrow-down'), ('cloud-download-alt', 'cloud-arrow-down'), ('cloud-upload', 'cloud-arrow-up'), ('cloud-upload-alt', 'cloud-arrow-up'), ('cocktail', 'martini-glass-citrus'), ('coffee', 'mug-saucer'), ('coffee-togo', 'cup-togo'), ('cog', 'gear'), ('cogs', 'gears'), ('columns', 'table-columns'), ('comment-alt', 'message'), ('comment-alt-check', 'message-check'), ('comment-alt-dollar', 'message-dollar'), ('comment-alt-dots', 'message-dots'), ('comment-alt-edit', 'message-pen'), ('comment-alt-exclamation', 'message-exclamation'), ('comment-alt-lines', 'message-lines'), ('comment-alt-medical', 'message-medical'), ('comment-alt-minus', 'message-minus'), ('comment-alt-music', 'message-music'), ('comment-alt-plus', 'message-plus'), ('comment-alt-slash', 'message-slash'), ('comment-alt-smile', 'message-smile'), ('comment-alt-times', 'message-xmark'), ('comment-edit', 'comment-pen'), ('comment-times', 'comment-xmark'), ('comments-alt', 'messages'), ('comments-alt-dollar', 'messages-dollar'), ('compress-alt', 'down-left-and-up-right-to-center'), ('compress-arrows-alt', 'minimize'), ('concierge-bell', 'bell-concierge'), ('construction', 'triangle-person-digging'), ('conveyor-belt-alt', 'conveyor-belt-boxes'), ('cowbell-more', 'cowbell-circle-plus'), ('cricket', 'cricket-bat-ball'), ('crop-alt', 'crop-simple'), ('curling', 'curling-stone'), ('cut', 'scissors'), ('deaf', 'ear-deaf'), ('debug', 'ban-bug'), ('desktop-alt', 'desktop'), ('dewpoint', 'droplet-degree'), ('diagnoses', 'person-dots-from-line'), ('digging', 'person-digging'), ('digital-tachograph', 'tachograph-digital'), ('directions', 'diamond-turn-right'), ('dizzy', 'face-dizzy'), ('dolly-flatbed', 'cart-flatbed'), ('dolly-flatbed-alt', 'cart-flatbed-boxes'), ('dolly-flatbed-empty', 'cart-flatbed-empty'), ('donate', 'circle-dollar-to-slot'), ('dot-circle', 'circle-dot'), ('drafting-compass', 'compass-drafting'), ('drone-alt', 'drone-front'), ('dryer-alt', 'dryer-heat'), ('eclipse-alt', 'moon-over-sun'), ('edit', 'pen-to-square'), ('ellipsis-h', 'ellipsis'), ('ellipsis-h-alt', 'ellipsis-stroke'), ('ellipsis-v', 'ellipsis-vertical'), ('ellipsis-v-alt', 'ellipsis-stroke-vertical'), ('envelope-square', 'square-envelope'), ('exchange', 'arrow-right-arrow-left'), ('exchange-alt', 'right-left'), ('exclamation-circle', 'circle-exclamation'), ('exclamation-square', 'square-exclamation'), ('exclamation-triangle', 'triangle-exclamation'), ('expand-alt', 'up-right-and-down-left-from-center'), ('expand-arrows', 'arrows-maximize'), ('expand-arrows-alt', 'maximize'), ('external-link', 'arrow-up-right-from-square'), ('external-link-alt', 'up-right-from-square'), ('external-link-square', 'square-arrow-up-right'), ('external-link-square-alt', 'square-up-right'), ('eyedropper', 'eye-dropper'), ('fast-backward', 'backward-fast'), ('fast-forward', 'forward-fast'), ('feather-alt', 'feather-pointed'), ('female', 'person-dress'), ('field-hockey', 'field-hockey-stick-ball'), ('fighter-jet', 'jet-fighter'), ('file-alt', 'file-lines'), ('file-archive', 'file-zipper'), ('file-chart-line', 'file-chart-column'), ('file-download', 'file-arrow-down'), ('file-edit', 'file-pen'), ('file-medical-alt', 'file-waveform'), ('file-search', 'file-magnifying-glass'), ('file-times', 'file-xmark'), ('file-upload', 'file-arrow-up'), ('film-alt', 'film-simple'), ('fire-alt', 'fire-flame-curved'), ('first-aid', 'kit-medical'), ('fist-raised', 'hand-fist'), ('flag-alt', 'flag-swallowtail'), ('flame', 'fire-flame'), ('flask-poison', 'flask-round-poison'), ('flask-potion', 'flask-round-potion'), ('flushed', 'face-flushed'), ('fog', 'cloud-fog'), ('folder-download', 'folder-arrow-down'), ('folder-times', 'folder-xmark'), ('folder-upload', 'folder-arrow-up'), ('font-awesome-alt', 'square-font-awesome-stroke'), ('font-awesome-flag', 'font-awesome'), ('font-awesome-logo-full', 'font-awesome'), ('football-ball', 'football'), ('fragile', 'wine-glass-crack'), ('frosty-head', 'snowman-head'), ('frown', 'face-frown'), ('frown-open', 'face-frown-open'), ('funnel-dollar', 'filter-circle-dollar'), ('game-board-alt', 'game-board-simple'), ('gamepad-alt', 'gamepad-modern'), ('glass-champagne', 'champagne-glass'), ('glass-cheers', 'champagne-glasses'), ('glass-martini', 'martini-glass-empty'), ('glass-martini-alt', 'martini-glass'), ('glass-whiskey', 'whiskey-glass'), ('glass-whiskey-rocks', 'whiskey-glass-ice'), ('glasses-alt', 'glasses-round'), ('globe-africa', 'earth-africa'), ('globe-americas', 'earth-americas'), ('globe-asia', 'earth-asia'), ('globe-europe', 'earth-europe'), ('golf-ball', 'golf-ball-tee'), ('grimace', 'face-grimace'), ('grin', 'face-grin'), ('grin-alt', 'face-grin-wide'), ('grin-beam', 'face-grin-beam'), ('grin-beam-sweat', 'face-grin-beam-sweat'), ('grin-hearts', 'face-grin-hearts'), ('grin-squint', 'face-grin-squint'), ('grin-squint-tears', 'face-grin-squint-tears'), ('grin-stars', 'face-grin-stars'), ('grin-tears', 'face-grin-tears'), ('grin-tongue', 'face-grin-tongue'), ('grin-tongue-squint', 'face-grin-tongue-squint'), ('grin-tongue-wink', 'face-grin-tongue-wink'), ('grin-wink', 'face-grin-wink'), ('grip-horizontal', 'grip'), ('h-square', 'square-h'), ('hamburger', 'burger'), ('hand-holding-usd', 'hand-holding-dollar'), ('hand-holding-water', 'hand-holding-droplet'), ('hand-paper', 'hand'), ('hand-receiving', 'hands-holding-diamond'), ('hand-rock', 'hand-back-fist'), ('hands-heart', 'hands-holding-heart'), ('hands-helping', 'handshake-angle'), ('hands-usd', 'hands-holding-dollar'), ('hands-wash', 'hands-bubbles'), ('handshake-alt', 'handshake-simple'), ('handshake-alt-slash', 'handshake-simple-slash'), ('hard-hat', 'helmet-safety'), ('hdd', 'hard-drive'), ('head-vr', 'head-side-goggles'), ('headphones-alt', 'headphones-simple'), ('heart-broken', 'heart-crack'), ('heart-circle', 'circle-heart'), ('heart-rate', 'wave-pulse'), ('heart-square', 'square-heart'), ('heartbeat', 'heart-pulse'), ('hiking', 'person-hiking'), ('history', 'clock-rotate-left'), ('home', 'house'), ('home-alt', 'house'), ('home-heart', 'house-heart'), ('home-lg', 'house-chimney'), ('home-lg-alt', 'house'), ('hospital-alt', 'hospital'), ('hospital-symbol', 'circle-h'), ('hot-tub', 'hot-tub-person'), ('hourglass-half', 'hourglass'), ('house-damage', 'house-chimney-crack'), ('house-leave', 'house-person-leave'), ('house-return', 'house-person-return'), ('hryvnia', 'hryvnia-sign'), ('humidity', 'droplet-percent'), ('icons-alt', 'symbols'), ('id-card-alt', 'id-card-clip'), ('industry-alt', 'industry-windows'), ('info-circle', 'circle-info'), ('info-square', 'square-info'), ('innosoft', '42-group'), ('inventory', 'shelves'), ('journal-whills', 'book-journal-whills'), ('kiss', 'face-kiss'), ('kiss-beam', 'face-kiss-beam'), ('kiss-wink-heart', 'face-kiss-wink-heart'), ('landmark-alt', 'landmark-dome'), ('laptop-house', 'house-laptop'), ('laugh', 'face-laugh'), ('laugh-beam', 'face-laugh-beam'), ('laugh-squint', 'face-laugh-squint'), ('laugh-wink', 'face-laugh-wink'), ('level-down', 'arrow-turn-down'), ('level-down-alt', 'turn-down'), ('level-up', 'arrow-turn-up'), ('level-up-alt', 'turn-up'), ('list-alt', 'rectangle-list'), ('location', 'location-crosshairs'), ('location-circle', 'circle-location-arrow'), ('location-slash', 'location-crosshairs-slash'), ('lock-alt', 'lock-keyhole'), ('lock-open-alt', 'lock-keyhole-open'), ('long-arrow-alt-down', 'down-long'), ('long-arrow-alt-left', 'left-long'), ('long-arrow-alt-right', 'right-long'), ('long-arrow-alt-up', 'up-long'), ('long-arrow-down', 'arrow-down-long'), ('long-arrow-left', 'arrow-left-long'), ('long-arrow-right', 'arrow-right-long'), ('long-arrow-up', 'arrow-up-long'), ('low-vision', 'eye-low-vision'), ('luchador', 'luchador-mask'), ('luggage-cart', 'cart-flatbed-suitcase'), ('magic', 'wand-magic'), ('mail-bulk', 'envelopes-bulk'), ('male', 'person'), ('map-marked', 'map-location'), ('map-marked-alt', 'map-location-dot'), ('map-marker', 'location-pin'), ('map-marker-alt', 'location-dot'), ('map-marker-alt-slash', 'location-dot-slash'), ('map-marker-check', 'location-check'), ('map-marker-edit', 'location-pen'), ('map-marker-exclamation', 'location-exclamation'), ('map-marker-minus', 'location-minus'), ('map-marker-plus', 'location-plus'), ('map-marker-question', 'location-question'), ('map-marker-slash', 'location-pin-slash'), ('map-marker-smile', 'location-smile'), ('map-marker-times', 'location-xmark'), ('map-signs', 'signs-post'), ('mars-stroke-h', 'mars-stroke-right'), ('mars-stroke-v', 'mars-stroke-up'), ('medium-m', 'medium'), ('medkit', 'suitcase-medical'), ('meh', 'face-meh'), ('meh-blank', 'face-meh-blank'), ('meh-rolling-eyes', 'face-rolling-eyes'), ('microphone-alt', 'microphone-lines'), ('microphone-alt-slash', 'microphone-lines-slash'), ('mind-share', 'brain-arrow-curved-right'), ('minus-circle', 'circle-minus'), ('minus-hexagon', 'hexagon-minus'), ('minus-octagon', 'octagon-minus'), ('minus-square', 'square-minus'), ('mobile-alt', 'mobile-screen-button'), ('mobile-android', 'mobile'), ('mobile-android-alt', 'mobile-screen'), ('money-bill-alt', 'money-bill-1'), ('money-bill-wave-alt', 'money-bill-1-wave'), ('money-check-alt', 'money-check-dollar'), ('money-check-edit', 'money-check-pen'), ('money-check-edit-alt', 'money-check-dollar-pen'), ('monitor-heart-rate', 'monitor-waveform'), ('mouse', 'computer-mouse'), ('mouse-alt', 'computer-mouse-scrollwheel'), ('mouse-pointer', 'arrow-pointer'), ('music-alt', 'music-note'), ('music-alt-slash', 'music-note-slash'), ('oil-temp', 'oil-temperature'), ('page-break', 'file-dashed-line'), ('paint-brush', 'paintbrush'), ('paint-brush-alt', 'paintbrush-fine'), ('paint-brush-fine', 'paintbrush-fine'), ('pallet-alt', 'pallet-boxes'), ('paragraph-rtl', 'paragraph-left'), ('parking', 'square-parking'), ('parking-circle', 'circle-parking'), ('parking-circle-slash', 'ban-parking'), ('parking-slash', 'square-parking-slash'), ('pastafarianism', 'spaghetti-monster-flying'), ('pause-circle', 'circle-pause'), ('paw-alt', 'paw-simple'), ('pen-alt', 'pen-clip'), ('pen-square', 'square-pen'), ('pencil-alt', 'pencil'), ('pencil-paintbrush', 'pen-paintbrush'), ('pencil-ruler', 'pen-ruler'), ('pennant', 'flag-pennant'), ('people-arrows', 'people-arrows-left-right'), ('people-carry', 'people-carry-box'), ('percentage', 'percent'), ('person-carry', 'person-carry-box'), ('phone-alt', 'phone-flip'), ('phone-laptop', 'laptop-mobile'), ('phone-square', 'square-phone'), ('phone-square-alt', 'square-phone-flip'), ('photo-video', 'photo-film'), ('plane-alt', 'plane-engines'), ('play-circle', 'circle-play'), ('plus-circle', 'circle-plus'), ('plus-hexagon', 'hexagon-plus'), ('plus-octagon', 'octagon-plus'), ('plus-square', 'square-plus'), ('poll', 'square-poll-vertical'), ('poll-h', 'square-poll-horizontal'), ('portal-enter', 'person-to-portal'), ('portal-exit', 'person-from-portal'), ('portrait', 'image-portrait'), ('pound-sign', 'sterling-sign'), ('pray', 'person-praying'), ('praying-hands', 'hands-praying'), ('prescription-bottle-alt', 'prescription-bottle-medical'), ('presentation', 'presentation-screen'), ('print-search', 'print-magnifying-glass'), ('procedures', 'bed-pulse'), ('project-diagram', 'diagram-project'), ('question-circle', 'circle-question'), ('question-square', 'square-question'), ('quran', 'book-quran'), ('rabbit-fast', 'rabbit-running'), ('radiation-alt', 'circle-radiation'), ('radio-alt', 'radio-tuner'), ('random', 'shuffle'), ('rectangle-landscape', 'rectangle'), ('rectangle-portrait', 'rectangle-vertical'), ('redo', 'arrow-rotate-right'), ('redo-alt', 'rotate-right'), ('remove-format', 'text-slash'), ('repeat-1-alt', 'arrows-repeat-1'), ('repeat-alt', 'arrows-repeat'), ('retweet-alt', 'arrows-retweet'), ('rss-square', 'square-rss'), ('running', 'person-running'), ('sad-cry', 'face-sad-cry'), ('sad-tear', 'face-sad-tear'), ('save', 'floppy-disk'), ('sax-hot', 'saxophone-fire'), ('scalpel-path', 'scalpel-line-dashed'), ('scanner-image', 'scanner'), ('search', 'magnifying-glass'), ('search-dollar', 'magnifying-glass-dollar'), ('search-location', 'magnifying-glass-location'), ('search-minus', 'magnifying-glass-minus'), ('search-plus', 'magnifying-glass-plus'), ('sensor-alert', 'sensor-triangle-exclamation'), ('sensor-smoke', 'sensor-cloud'), ('share-alt', 'share-nodes'), ('share-alt-square', 'square-share-nodes'), ('share-square', 'share-from-square'), ('shield-alt', 'shield-halved'), ('shipping-fast', 'truck-fast'), ('shipping-timed', 'truck-clock'), ('shopping-bag', 'bag-shopping'), ('shopping-basket', 'basket-shopping'), ('shopping-cart', 'cart-shopping'), ('shuttle-van', 'van-shuttle'), ('sign', 'sign-hanging'), ('sign-in', 'arrow-right-to-bracket'), ('sign-in-alt', 'right-to-bracket'), ('sign-language', 'hands'), ('sign-out', 'arrow-right-from-bracket'), ('sign-out-alt', 'right-from-bracket'), ('signal-1', 'signal-weak'), ('signal-2', 'signal-fair'), ('signal-3', 'signal-good'), ('signal-4', 'signal-strong'), ('signal-alt', 'signal-bars'), ('signal-alt-1', 'signal-bars-weak'), ('signal-alt-2', 'signal-bars-fair'), ('signal-alt-3', 'signal-bars-good'), ('signal-alt-slash', 'signal-bars-slash'), ('skating', 'person-skating'), ('ski-jump', 'person-ski-jumping'), ('ski-lift', 'person-ski-lift'), ('skiing', 'person-skiing'), ('skiing-nordic', 'person-skiing-nordic'), ('slack-hash', 'slack'), ('sledding', 'person-sledding'), ('sliders-h', 'sliders'), ('sliders-h-square', 'square-sliders'), ('sliders-v', 'sliders-up'), ('sliders-v-square', 'square-sliders-vertical'), ('smile', 'face-smile'), ('smile-beam', 'face-smile-beam'), ('smile-plus', 'face-smile-plus'), ('smile-wink', 'face-smile-wink'), ('smoking-ban', 'ban-smoking'), ('sms', 'comment-sms'), ('snapchat-ghost', 'snapchat'), ('snowboarding', 'person-snowboarding'), ('snowmobile', 'person-snowmobiling'), ('sort-alpha-down', 'arrow-down-a-z'), ('sort-alpha-down-alt', 'arrow-down-z-a'), ('sort-alpha-up', 'arrow-up-a-z'), ('sort-alpha-up-alt', 'arrow-up-z-a'), ('sort-alt', 'arrow-down-arrow-up'), ('sort-amount-down', 'arrow-down-wide-short'), ('sort-amount-down-alt', 'arrow-down-short-wide'), ('sort-amount-up', 'arrow-up-wide-short'), ('sort-amount-up-alt', 'arrow-up-short-wide'), ('sort-circle', 'circle-sort'), ('sort-circle-down', 'circle-sort-down'), ('sort-circle-up', 'circle-sort-up'), ('sort-numeric-down', 'arrow-down-1-9'), ('sort-numeric-down-alt', 'arrow-down-9-1'), ('sort-numeric-up', 'arrow-up-1-9'), ('sort-numeric-up-alt', 'arrow-up-9-1'), ('sort-shapes-down', 'arrow-down-triangle-square'), ('sort-shapes-down-alt', 'arrow-down-square-triangle'), ('sort-shapes-up', 'arrow-up-triangle-square'), ('sort-shapes-up-alt', 'arrow-up-square-triangle'), ('sort-size-down', 'arrow-down-big-small'), ('sort-size-down-alt', 'arrow-down-small-big'), ('sort-size-up', 'arrow-up-big-small'), ('sort-size-up-alt', 'arrow-up-small-big'), ('soup', 'bowl-hot'), ('space-shuttle', 'shuttle-space'), ('space-station-moon-alt', 'space-station-moon-construction'), ('square-root-alt', 'square-root-variable'), ('star-half-alt', 'star-half-stroke'), ('starfighter-alt', 'starfighter-twin-ion-engine'), ('step-backward', 'backward-step'), ('step-forward', 'forward-step'), ('sticky-note', 'note-sticky'), ('stop-circle', 'circle-stop'), ('store-alt', 'shop'), ('store-alt-slash', 'shop-slash'), ('stream', 'bars-staggered'), ('subway', 'train-subway'), ('surprise', 'face-surprise'), ('swimmer', 'person-swimming'), ('swimming-pool', 'water-ladder'), ('sync', 'arrows-rotate'), ('sync-alt', 'rotate'), ('table-tennis', 'table-tennis-paddle-ball'), ('tablet-alt', 'tablet-screen-button'), ('tablet-android', 'tablet'), ('tablet-android-alt', 'tablet-screen'), ('tachometer', 'gauge-simple'), ('tachometer-alt', 'gauge'), ('tachometer-alt-average', 'gauge-med'), ('tachometer-alt-fast', 'gauge'), ('tachometer-alt-fastest', 'gauge-max'), ('tachometer-alt-slow', 'gauge-low'), ('tachometer-alt-slowest', 'gauge-min'), ('tachometer-average', 'gauge-simple-med'), ('tachometer-fast', 'gauge-simple'), ('tachometer-fastest', 'gauge-simple-max'), ('tachometer-slow', 'gauge-simple-low'), ('tachometer-slowest', 'gauge-simple-min'), ('tanakh', 'book-tanakh'), ('tasks', 'list-check'), ('tasks-alt', 'bars-progress'), ('telegram-plane', 'telegram'), ('temperature-down', 'temperature-arrow-down'), ('temperature-frigid', 'temperature-snow'), ('temperature-hot', 'temperature-sun'), ('temperature-up', 'temperature-arrow-up'), ('tenge', 'tenge-sign'), ('th', 'table-cells'), ('th-large', 'table-cells-large'), ('th-list', 'table-list'), ('theater-masks', 'masks-theater'), ('thermometer-empty', 'temperature-empty'), ('thermometer-full', 'temperature-full'), ('thermometer-half', 'temperature-half'), ('thermometer-quarter', 'temperature-quarter'), ('thermometer-three-quarters', 'temperature-three-quarters'), ('thumb-tack', 'thumbtack'), ('thunderstorm', 'cloud-bolt'), ('thunderstorm-moon', 'cloud-bolt-moon'), ('thunderstorm-sun', 'cloud-bolt-sun'), ('ticket-alt', 'ticket-simple'), ('times', 'xmark'), ('times-circle', 'circle-xmark'), ('times-hexagon', 'hexagon-xmark'), ('times-octagon', 'octagon-xmark'), ('times-square', 'square-xmark'), ('tint', 'droplet'), ('tint-slash', 'droplet-slash'), ('tired', 'face-tired'), ('toilet-paper-alt', 'toilet-paper-blank'), ('tombstone-alt', 'tombstone-blank'), ('tools', 'screwdriver-wrench'), ('torah', 'scroll-torah'), ('tram', 'train-tram'), ('transgender-alt', 'transgender'), ('trash-alt', 'trash-can'), ('trash-restore', 'trash-arrow-up'), ('trash-restore-alt', 'trash-can-arrow-up'), ('trash-undo-alt', 'trash-can-undo'), ('tree-alt', 'tree-deciduous'), ('triangle-music', 'triangle-instrument'), ('trophy-alt', 'trophy-star'), ('truck-couch', 'truck-ramp-couch'), ('truck-loading', 'truck-ramp-box'), ('tshirt', 'shirt'), ('tv-alt', 'tv'), ('undo', 'arrow-rotate-left'), ('undo-alt', 'rotate-left'), ('university', 'building-columns'), ('unlink', 'link-slash'), ('unlock-alt', 'unlock-keyhole'), ('usd-circle', 'circle-dollar'), ('usd-square', 'square-dollar'), ('user-alt', 'user-large'), ('user-alt-slash', 'user-large-slash'), ('user-chart', 'chart-user'), ('user-circle', 'circle-user'), ('user-cog', 'user-gear'), ('user-edit', 'user-pen'), ('user-friends', 'user-group'), ('user-hard-hat', 'user-helmet-safety'), ('user-md', 'user-doctor'), ('user-md-chat', 'user-doctor-message'), ('user-times', 'user-xmark'), ('users-class', 'screen-users'), ('users-cog', 'users-gear'), ('users-crown', 'user-group-crown'), ('utensil-fork', 'fork'), ('utensil-knife', 'knife'), ('utensil-spoon', 'spoon'), ('utensils-alt', 'fork-knife'), ('vhs', 'cassette-vhs'), ('volleyball-ball', 'volleyball'), ('volume-down', 'volume-low'), ('volume-mute', 'volume-xmark'), ('volume-up', 'volume-high'), ('vote-nay', 'xmark-to-slot'), ('vote-yea', 'check-to-slot'), ('walking', 'person-walking'), ('warehouse-alt', 'warehouse-full'), ('washer', 'washing-machine'), ('water-lower', 'water-arrow-down'), ('water-rise', 'water-arrow-up'), ('waveform-path', 'waveform-lines'), ('webcam', 'camera-web'), ('webcam-slash', 'camera-web-slash'), ('weight', 'weight-scale'), ('wifi-1', 'wifi-weak'), ('wifi-2', 'wifi-fair'), ('window-alt', 'window-flip'), ('window-close', 'rectangle-xmark'), ('wine-glass-alt', 'wine-glass-empty')) AS mapping(from_icon, to_icon)\n)\nUPDATE groups\nSET flair_icon =\n CASE\n WHEN flair_icon LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN flair_icon LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)\n WHEN flair_icon LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN flair_icon LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)\n ELSE remaps.to_icon\n END\nFROM remaps\nWHERE flair_icon = remaps.from_icon\n OR flair_icon = CONCAT('fa-', remaps.from_icon)\n OR flair_icon = CONCAT('far-', remaps.from_icon)\n OR flair_icon = CONCAT('fab-', remaps.from_icon)\n OR flair_icon = CONCAT('far fa-', remaps.from_icon)\n OR flair_icon = CONCAT('fab fa-', remaps.from_icon)\n OR flair_icon = CONCAT('fas fa-', remaps.from_icon);\n")
-> 0.0064s
-- execute("UPDATE groups\nSET flair_icon =\nCASE\n WHEN flair_icon LIKE 'fas fa-%' THEN SUBSTRING(flair_icon FROM 8)\n WHEN flair_icon LIKE 'far fa-%' THEN CONCAT('far-', SUBSTRING(flair_icon FROM 8))\n WHEN flair_icon LIKE 'fab fa-%' THEN CONCAT('fab-', SUBSTRING(flair_icon FROM 8))\n WHEN flair_icon LIKE 'fa-%' THEN SUBSTRING(flair_icon FROM 4)\n ELSE flair_icon\nEND\nWHERE flair_icon LIKE 'fa-%'\n OR flair_icon LIKE 'far fa-%'\n OR flair_icon LIKE 'fab fa-%'\n OR flair_icon LIKE 'fas fa-%';\n")
-> 0.0004s
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon FROM (VALUES ('adjust', 'circle-half-stroke'), ('air-freshener', 'spray-can-sparkles'), ('alien-monster', 'alien-8bit'), ('allergies', 'hand-dots'), ('ambulance', 'truck-medical'), ('american-sign-language-interpreting', 'hands-asl-interpreting'), ('analytics', 'chart-mixed'), ('angle-double-down', 'angles-down'), ('angle-double-left', 'angles-left'), ('angle-double-right', 'angles-right'), ('angle-double-up', 'angles-up'), ('angry', 'face-angry'), ('apple-alt', 'apple-whole'), ('apple-crate', 'crate-apple'), ('archive', 'box-archive'), ('arrow-alt-circle-down', 'circle-down'), ('arrow-alt-circle-left', 'circle-left'), ('arrow-alt-circle-right', 'circle-right'), ('arrow-alt-circle-up', 'circle-up'), ('arrow-alt-down', 'down'), ('arrow-alt-from-bottom', 'up-from-line'), ('arrow-alt-from-left', 'right-from-line'), ('arrow-alt-from-right', 'left-from-line'), ('arrow-alt-from-top', 'down-from-line'), ('arrow-alt-left', 'left'), ('arrow-alt-right', 'right'), ('arrow-alt-square-down', 'square-down'), ('arrow-alt-square-left', 'square-left'), ('arrow-alt-square-right', 'square-right'), ('arrow-alt-square-up', 'square-up'), ('arrow-alt-to-bottom', 'down-to-line'), ('arrow-alt-to-left', 'left-to-line'), ('arrow-alt-to-right', 'right-to-line'), ('arrow-alt-to-top', 'up-to-line'), ('arrow-alt-up', 'up'), ('arrow-circle-down', 'circle-arrow-down'), ('arrow-circle-left', 'circle-arrow-left'), ('arrow-circle-right', 'circle-arrow-right'), ('arrow-circle-up', 'circle-arrow-up'), ('arrow-from-bottom', 'arrow-up-from-line'), ('arrow-from-left', 'arrow-right-from-line'), ('arrow-from-right', 'arrow-left-from-line'), ('arrow-from-top', 'arrow-down-from-line'), ('arrow-square-down', 'square-arrow-down'), ('arrow-square-left', 'square-arrow-left'), ('arrow-square-right', 'square-arrow-right'), ('arrow-square-up', 'square-arrow-up'), ('arrow-to-bottom', 'arrow-down-to-line'), ('arrow-to-left', 'arrow-left-to-line'), ('arrow-to-right', 'arrow-right-to-line'), ('arrow-to-top', 'arrow-up-to-line'), ('arrows', 'arrows-up-down-left-right'), ('arrows-alt', 'up-down-left-right'), ('arrows-alt-h', 'left-right'), ('arrows-alt-v', 'up-down'), ('arrows-h', 'arrows-left-right'), ('arrows-v', 'arrows-up-down'), ('assistive-listening-systems', 'ear-listen'), ('atlas', 'book-atlas'), ('atom-alt', 'atom-simple'), ('backspace', 'delete-left'), ('balance-scale', 'scale-balanced'), ('balance-scale-left', 'scale-unbalanced'), ('balance-scale-right', 'scale-unbalanced-flip'), ('band-aid', 'bandage'), ('barcode-alt', 'rectangle-barcode'), ('baseball-ball', 'baseball'), ('basketball-ball', 'basketball'), ('bed-alt', 'bed-front'), ('beer', 'beer-mug-empty'), ('betamax', 'cassette-betamax'), ('bible', 'book-bible'), ('biking', 'person-biking'), ('biking-mountain', 'person-biking-mountain'), ('birthday-cake', 'cake-candles'), ('blind', 'person-walking-with-cane'), ('book-alt', 'book-blank'), ('book-dead', 'book-skull'), ('book-reader', 'book-open-reader'), ('book-spells', 'book-sparkles'), ('border-style', 'border-top-left'), ('border-style-alt', 'border-bottom-right'), ('box-alt', 'box-taped'), ('box-fragile', 'square-fragile'), ('box-full', 'box-open-full'), ('box-up', 'square-this-way-up'), ('box-usd', 'box-dollar'), ('boxes', 'boxes-stacked'), ('boxes-alt', 'boxes-stacked'), ('brackets', 'brackets-square'), ('broadcast-tower', 'tower-broadcast'), ('burn', 'fire-flame-simple'), ('bus-alt', 'bus-simple'), ('calculator-alt', 'calculator-simple'), ('calendar-alt', 'calendar-days'), ('calendar-edit', 'calendar-pen'), ('calendar-times', 'calendar-xmark'), ('camera-alt', 'camera'), ('camera-home', 'camera-security'), ('car-alt', 'car-rear'), ('car-crash', 'car-burst'), ('car-mechanic', 'car-wrench'), ('caravan-alt', 'caravan-simple'), ('caret-circle-down', 'circle-caret-down'), ('caret-circle-left', 'circle-caret-left'), ('caret-circle-right', 'circle-caret-right'), ('caret-circle-up', 'circle-caret-up'), ('caret-square-down', 'square-caret-down'), ('caret-square-left', 'square-caret-left'), ('caret-square-right', 'square-caret-right'), ('caret-square-up', 'square-caret-up'), ('cctv', 'camera-cctv'), ('chalkboard-teacher', 'chalkboard-user'), ('chart-pie-alt', 'chart-pie-simple'), ('check-circle', 'circle-check'), ('check-square', 'square-check'), ('cheeseburger', 'burger-cheese'), ('chess-bishop-alt', 'chess-bishop-piece'), ('chess-clock-alt', 'chess-clock-flip'), ('chess-king-alt', 'chess-king-piece'), ('chess-knight-alt', 'chess-knight-piece'), ('chess-pawn-alt', 'chess-pawn-piece'), ('chess-queen-alt', 'chess-queen-piece'), ('chess-rook-alt', 'chess-rook-piece'), ('chevron-circle-down', 'circle-chevron-down'), ('chevron-circle-left', 'circle-chevron-left'), ('chevron-circle-right', 'circle-chevron-right'), ('chevron-circle-up', 'circle-chevron-up'), ('chevron-double-down', 'chevrons-down'), ('chevron-double-left', 'chevrons-left'), ('chevron-double-right', 'chevrons-right'), ('chevron-double-up', 'chevrons-up'), ('chevron-square-down', 'square-chevron-down'), ('chevron-square-left', 'square-chevron-left'), ('chevron-square-right', 'square-chevron-right'), ('chevron-square-up', 'square-chevron-up'), ('clinic-medical', 'house-chimney-medical'), ('cloud-download', 'cloud-arrow-down'), ('cloud-download-alt', 'cloud-arrow-down'), ('cloud-upload', 'cloud-arrow-up'), ('cloud-upload-alt', 'cloud-arrow-up'), ('cocktail', 'martini-glass-citrus'), ('coffee', 'mug-saucer'), ('coffee-togo', 'cup-togo'), ('cog', 'gear'), ('cogs', 'gears'), ('columns', 'table-columns'), ('comment-alt', 'message'), ('comment-alt-check', 'message-check'), ('comment-alt-dollar', 'message-dollar'), ('comment-alt-dots', 'message-dots'), ('comment-alt-edit', 'message-pen'), ('comment-alt-exclamation', 'message-exclamation'), ('comment-alt-lines', 'message-lines'), ('comment-alt-medical', 'message-medical'), ('comment-alt-minus', 'message-minus'), ('comment-alt-music', 'message-music'), ('comment-alt-plus', 'message-plus'), ('comment-alt-slash', 'message-slash'), ('comment-alt-smile', 'message-smile'), ('comment-alt-times', 'message-xmark'), ('comment-edit', 'comment-pen'), ('comment-times', 'comment-xmark'), ('comments-alt', 'messages'), ('comments-alt-dollar', 'messages-dollar'), ('compress-alt', 'down-left-and-up-right-to-center'), ('compress-arrows-alt', 'minimize'), ('concierge-bell', 'bell-concierge'), ('construction', 'triangle-person-digging'), ('conveyor-belt-alt', 'conveyor-belt-boxes'), ('cowbell-more', 'cowbell-circle-plus'), ('cricket', 'cricket-bat-ball'), ('crop-alt', 'crop-simple'), ('curling', 'curling-stone'), ('cut', 'scissors'), ('deaf', 'ear-deaf'), ('debug', 'ban-bug'), ('desktop-alt', 'desktop'), ('dewpoint', 'droplet-degree'), ('diagnoses', 'person-dots-from-line'), ('digging', 'person-digging'), ('digital-tachograph', 'tachograph-digital'), ('directions', 'diamond-turn-right'), ('dizzy', 'face-dizzy'), ('dolly-flatbed', 'cart-flatbed'), ('dolly-flatbed-alt', 'cart-flatbed-boxes'), ('dolly-flatbed-empty', 'cart-flatbed-empty'), ('donate', 'circle-dollar-to-slot'), ('dot-circle', 'circle-dot'), ('drafting-compass', 'compass-drafting'), ('drone-alt', 'drone-front'), ('dryer-alt', 'dryer-heat'), ('eclipse-alt', 'moon-over-sun'), ('edit', 'pen-to-square'), ('ellipsis-h', 'ellipsis'), ('ellipsis-h-alt', 'ellipsis-stroke'), ('ellipsis-v', 'ellipsis-vertical'), ('ellipsis-v-alt', 'ellipsis-stroke-vertical'), ('envelope-square', 'square-envelope'), ('exchange', 'arrow-right-arrow-left'), ('exchange-alt', 'right-left'), ('exclamation-circle', 'circle-exclamation'), ('exclamation-square', 'square-exclamation'), ('exclamation-triangle', 'triangle-exclamation'), ('expand-alt', 'up-right-and-down-left-from-center'), ('expand-arrows', 'arrows-maximize'), ('expand-arrows-alt', 'maximize'), ('external-link', 'arrow-up-right-from-square'), ('external-link-alt', 'up-right-from-square'), ('external-link-square', 'square-arrow-up-right'), ('external-link-square-alt', 'square-up-right'), ('eyedropper', 'eye-dropper'), ('fast-backward', 'backward-fast'), ('fast-forward', 'forward-fast'), ('feather-alt', 'feather-pointed'), ('female', 'person-dress'), ('field-hockey', 'field-hockey-stick-ball'), ('fighter-jet', 'jet-fighter'), ('file-alt', 'file-lines'), ('file-archive', 'file-zipper'), ('file-chart-line', 'file-chart-column'), ('file-download', 'file-arrow-down'), ('file-edit', 'file-pen'), ('file-medical-alt', 'file-waveform'), ('file-search', 'file-magnifying-glass'), ('file-times', 'file-xmark'), ('file-upload', 'file-arrow-up'), ('film-alt', 'film-simple'), ('fire-alt', 'fire-flame-curved'), ('first-aid', 'kit-medical'), ('fist-raised', 'hand-fist'), ('flag-alt', 'flag-swallowtail'), ('flame', 'fire-flame'), ('flask-poison', 'flask-round-poison'), ('flask-potion', 'flask-round-potion'), ('flushed', 'face-flushed'), ('fog', 'cloud-fog'), ('folder-download', 'folder-arrow-down'), ('folder-times', 'folder-xmark'), ('folder-upload', 'folder-arrow-up'), ('font-awesome-alt', 'square-font-awesome-stroke'), ('font-awesome-flag', 'font-awesome'), ('font-awesome-logo-full', 'font-awesome'), ('football-ball', 'football'), ('fragile', 'wine-glass-crack'), ('frosty-head', 'snowman-head'), ('frown', 'face-frown'), ('frown-open', 'face-frown-open'), ('funnel-dollar', 'filter-circle-dollar'), ('game-board-alt', 'game-board-simple'), ('gamepad-alt', 'gamepad-modern'), ('glass-champagne', 'champagne-glass'), ('glass-cheers', 'champagne-glasses'), ('glass-martini', 'martini-glass-empty'), ('glass-martini-alt', 'martini-glass'), ('glass-whiskey', 'whiskey-glass'), ('glass-whiskey-rocks', 'whiskey-glass-ice'), ('glasses-alt', 'glasses-round'), ('globe-africa', 'earth-africa'), ('globe-americas', 'earth-americas'), ('globe-asia', 'earth-asia'), ('globe-europe', 'earth-europe'), ('golf-ball', 'golf-ball-tee'), ('grimace', 'face-grimace'), ('grin', 'face-grin'), ('grin-alt', 'face-grin-wide'), ('grin-beam', 'face-grin-beam'), ('grin-beam-sweat', 'face-grin-beam-sweat'), ('grin-hearts', 'face-grin-hearts'), ('grin-squint', 'face-grin-squint'), ('grin-squint-tears', 'face-grin-squint-tears'), ('grin-stars', 'face-grin-stars'), ('grin-tears', 'face-grin-tears'), ('grin-tongue', 'face-grin-tongue'), ('grin-tongue-squint', 'face-grin-tongue-squint'), ('grin-tongue-wink', 'face-grin-tongue-wink'), ('grin-wink', 'face-grin-wink'), ('grip-horizontal', 'grip'), ('h-square', 'square-h'), ('hamburger', 'burger'), ('hand-holding-usd', 'hand-holding-dollar'), ('hand-holding-water', 'hand-holding-droplet'), ('hand-paper', 'hand'), ('hand-receiving', 'hands-holding-diamond'), ('hand-rock', 'hand-back-fist'), ('hands-heart', 'hands-holding-heart'), ('hands-helping', 'handshake-angle'), ('hands-usd', 'hands-holding-dollar'), ('hands-wash', 'hands-bubbles'), ('handshake-alt', 'handshake-simple'), ('handshake-alt-slash', 'handshake-simple-slash'), ('hard-hat', 'helmet-safety'), ('hdd', 'hard-drive'), ('head-vr', 'head-side-goggles'), ('headphones-alt', 'headphones-simple'), ('heart-broken', 'heart-crack'), ('heart-circle', 'circle-heart'), ('heart-rate', 'wave-pulse'), ('heart-square', 'square-heart'), ('heartbeat', 'heart-pulse'), ('hiking', 'person-hiking'), ('history', 'clock-rotate-left'), ('home', 'house'), ('home-alt', 'house'), ('home-heart', 'house-heart'), ('home-lg', 'house-chimney'), ('home-lg-alt', 'house'), ('hospital-alt', 'hospital'), ('hospital-symbol', 'circle-h'), ('hot-tub', 'hot-tub-person'), ('hourglass-half', 'hourglass'), ('house-damage', 'house-chimney-crack'), ('house-leave', 'house-person-leave'), ('house-return', 'house-person-return'), ('hryvnia', 'hryvnia-sign'), ('humidity', 'droplet-percent'), ('icons-alt', 'symbols'), ('id-card-alt', 'id-card-clip'), ('industry-alt', 'industry-windows'), ('info-circle', 'circle-info'), ('info-square', 'square-info'), ('innosoft', '42-group'), ('inventory', 'shelves'), ('journal-whills', 'book-journal-whills'), ('kiss', 'face-kiss'), ('kiss-beam', 'face-kiss-beam'), ('kiss-wink-heart', 'face-kiss-wink-heart'), ('landmark-alt', 'landmark-dome'), ('laptop-house', 'house-laptop'), ('laugh', 'face-laugh'), ('laugh-beam', 'face-laugh-beam'), ('laugh-squint', 'face-laugh-squint'), ('laugh-wink', 'face-laugh-wink'), ('level-down', 'arrow-turn-down'), ('level-down-alt', 'turn-down'), ('level-up', 'arrow-turn-up'), ('level-up-alt', 'turn-up'), ('list-alt', 'rectangle-list'), ('location', 'location-crosshairs'), ('location-circle', 'circle-location-arrow'), ('location-slash', 'location-crosshairs-slash'), ('lock-alt', 'lock-keyhole'), ('lock-open-alt', 'lock-keyhole-open'), ('long-arrow-alt-down', 'down-long'), ('long-arrow-alt-left', 'left-long'), ('long-arrow-alt-right', 'right-long'), ('long-arrow-alt-up', 'up-long'), ('long-arrow-down', 'arrow-down-long'), ('long-arrow-left', 'arrow-left-long'), ('long-arrow-right', 'arrow-right-long'), ('long-arrow-up', 'arrow-up-long'), ('low-vision', 'eye-low-vision'), ('luchador', 'luchador-mask'), ('luggage-cart', 'cart-flatbed-suitcase'), ('magic', 'wand-magic'), ('mail-bulk', 'envelopes-bulk'), ('male', 'person'), ('map-marked', 'map-location'), ('map-marked-alt', 'map-location-dot'), ('map-marker', 'location-pin'), ('map-marker-alt', 'location-dot'), ('map-marker-alt-slash', 'location-dot-slash'), ('map-marker-check', 'location-check'), ('map-marker-edit', 'location-pen'), ('map-marker-exclamation', 'location-exclamation'), ('map-marker-minus', 'location-minus'), ('map-marker-plus', 'location-plus'), ('map-marker-question', 'location-question'), ('map-marker-slash', 'location-pin-slash'), ('map-marker-smile', 'location-smile'), ('map-marker-times', 'location-xmark'), ('map-signs', 'signs-post'), ('mars-stroke-h', 'mars-stroke-right'), ('mars-stroke-v', 'mars-stroke-up'), ('medium-m', 'medium'), ('medkit', 'suitcase-medical'), ('meh', 'face-meh'), ('meh-blank', 'face-meh-blank'), ('meh-rolling-eyes', 'face-rolling-eyes'), ('microphone-alt', 'microphone-lines'), ('microphone-alt-slash', 'microphone-lines-slash'), ('mind-share', 'brain-arrow-curved-right'), ('minus-circle', 'circle-minus'), ('minus-hexagon', 'hexagon-minus'), ('minus-octagon', 'octagon-minus'), ('minus-square', 'square-minus'), ('mobile-alt', 'mobile-screen-button'), ('mobile-android', 'mobile'), ('mobile-android-alt', 'mobile-screen'), ('money-bill-alt', 'money-bill-1'), ('money-bill-wave-alt', 'money-bill-1-wave'), ('money-check-alt', 'money-check-dollar'), ('money-check-edit', 'money-check-pen'), ('money-check-edit-alt', 'money-check-dollar-pen'), ('monitor-heart-rate', 'monitor-waveform'), ('mouse', 'computer-mouse'), ('mouse-alt', 'computer-mouse-scrollwheel'), ('mouse-pointer', 'arrow-pointer'), ('music-alt', 'music-note'), ('music-alt-slash', 'music-note-slash'), ('oil-temp', 'oil-temperature'), ('page-break', 'file-dashed-line'), ('paint-brush', 'paintbrush'), ('paint-brush-alt', 'paintbrush-fine'), ('paint-brush-fine', 'paintbrush-fine'), ('pallet-alt', 'pallet-boxes'), ('paragraph-rtl', 'paragraph-left'), ('parking', 'square-parking'), ('parking-circle', 'circle-parking'), ('parking-circle-slash', 'ban-parking'), ('parking-slash', 'square-parking-slash'), ('pastafarianism', 'spaghetti-monster-flying'), ('pause-circle', 'circle-pause'), ('paw-alt', 'paw-simple'), ('pen-alt', 'pen-clip'), ('pen-square', 'square-pen'), ('pencil-alt', 'pencil'), ('pencil-paintbrush', 'pen-paintbrush'), ('pencil-ruler', 'pen-ruler'), ('pennant', 'flag-pennant'), ('people-arrows', 'people-arrows-left-right'), ('people-carry', 'people-carry-box'), ('percentage', 'percent'), ('person-carry', 'person-carry-box'), ('phone-alt', 'phone-flip'), ('phone-laptop', 'laptop-mobile'), ('phone-square', 'square-phone'), ('phone-square-alt', 'square-phone-flip'), ('photo-video', 'photo-film'), ('plane-alt', 'plane-engines'), ('play-circle', 'circle-play'), ('plus-circle', 'circle-plus'), ('plus-hexagon', 'hexagon-plus'), ('plus-octagon', 'octagon-plus'), ('plus-square', 'square-plus'), ('poll', 'square-poll-vertical'), ('poll-h', 'square-poll-horizontal'), ('portal-enter', 'person-to-portal'), ('portal-exit', 'person-from-portal'), ('portrait', 'image-portrait'), ('pound-sign', 'sterling-sign'), ('pray', 'person-praying'), ('praying-hands', 'hands-praying'), ('prescription-bottle-alt', 'prescription-bottle-medical'), ('presentation', 'presentation-screen'), ('print-search', 'print-magnifying-glass'), ('procedures', 'bed-pulse'), ('project-diagram', 'diagram-project'), ('question-circle', 'circle-question'), ('question-square', 'square-question'), ('quran', 'book-quran'), ('rabbit-fast', 'rabbit-running'), ('radiation-alt', 'circle-radiation'), ('radio-alt', 'radio-tuner'), ('random', 'shuffle'), ('rectangle-landscape', 'rectangle'), ('rectangle-portrait', 'rectangle-vertical'), ('redo', 'arrow-rotate-right'), ('redo-alt', 'rotate-right'), ('remove-format', 'text-slash'), ('repeat-1-alt', 'arrows-repeat-1'), ('repeat-alt', 'arrows-repeat'), ('retweet-alt', 'arrows-retweet'), ('rss-square', 'square-rss'), ('running', 'person-running'), ('sad-cry', 'face-sad-cry'), ('sad-tear', 'face-sad-tear'), ('save', 'floppy-disk'), ('sax-hot', 'saxophone-fire'), ('scalpel-path', 'scalpel-line-dashed'), ('scanner-image', 'scanner'), ('search', 'magnifying-glass'), ('search-dollar', 'magnifying-glass-dollar'), ('search-location', 'magnifying-glass-location'), ('search-minus', 'magnifying-glass-minus'), ('search-plus', 'magnifying-glass-plus'), ('sensor-alert', 'sensor-triangle-exclamation'), ('sensor-smoke', 'sensor-cloud'), ('share-alt', 'share-nodes'), ('share-alt-square', 'square-share-nodes'), ('share-square', 'share-from-square'), ('shield-alt', 'shield-halved'), ('shipping-fast', 'truck-fast'), ('shipping-timed', 'truck-clock'), ('shopping-bag', 'bag-shopping'), ('shopping-basket', 'basket-shopping'), ('shopping-cart', 'cart-shopping'), ('shuttle-van', 'van-shuttle'), ('sign', 'sign-hanging'), ('sign-in', 'arrow-right-to-bracket'), ('sign-in-alt', 'right-to-bracket'), ('sign-language', 'hands'), ('sign-out', 'arrow-right-from-bracket'), ('sign-out-alt', 'right-from-bracket'), ('signal-1', 'signal-weak'), ('signal-2', 'signal-fair'), ('signal-3', 'signal-good'), ('signal-4', 'signal-strong'), ('signal-alt', 'signal-bars'), ('signal-alt-1', 'signal-bars-weak'), ('signal-alt-2', 'signal-bars-fair'), ('signal-alt-3', 'signal-bars-good'), ('signal-alt-slash', 'signal-bars-slash'), ('skating', 'person-skating'), ('ski-jump', 'person-ski-jumping'), ('ski-lift', 'person-ski-lift'), ('skiing', 'person-skiing'), ('skiing-nordic', 'person-skiing-nordic'), ('slack-hash', 'slack'), ('sledding', 'person-sledding'), ('sliders-h', 'sliders'), ('sliders-h-square', 'square-sliders'), ('sliders-v', 'sliders-up'), ('sliders-v-square', 'square-sliders-vertical'), ('smile', 'face-smile'), ('smile-beam', 'face-smile-beam'), ('smile-plus', 'face-smile-plus'), ('smile-wink', 'face-smile-wink'), ('smoking-ban', 'ban-smoking'), ('sms', 'comment-sms'), ('snapchat-ghost', 'snapchat'), ('snowboarding', 'person-snowboarding'), ('snowmobile', 'person-snowmobiling'), ('sort-alpha-down', 'arrow-down-a-z'), ('sort-alpha-down-alt', 'arrow-down-z-a'), ('sort-alpha-up', 'arrow-up-a-z'), ('sort-alpha-up-alt', 'arrow-up-z-a'), ('sort-alt', 'arrow-down-arrow-up'), ('sort-amount-down', 'arrow-down-wide-short'), ('sort-amount-down-alt', 'arrow-down-short-wide'), ('sort-amount-up', 'arrow-up-wide-short'), ('sort-amount-up-alt', 'arrow-up-short-wide'), ('sort-circle', 'circle-sort'), ('sort-circle-down', 'circle-sort-down'), ('sort-circle-up', 'circle-sort-up'), ('sort-numeric-down', 'arrow-down-1-9'), ('sort-numeric-down-alt', 'arrow-down-9-1'), ('sort-numeric-up', 'arrow-up-1-9'), ('sort-numeric-up-alt', 'arrow-up-9-1'), ('sort-shapes-down', 'arrow-down-triangle-square'), ('sort-shapes-down-alt', 'arrow-down-square-triangle'), ('sort-shapes-up', 'arrow-up-triangle-square'), ('sort-shapes-up-alt', 'arrow-up-square-triangle'), ('sort-size-down', 'arrow-down-big-small'), ('sort-size-down-alt', 'arrow-down-small-big'), ('sort-size-up', 'arrow-up-big-small'), ('sort-size-up-alt', 'arrow-up-small-big'), ('soup', 'bowl-hot'), ('space-shuttle', 'shuttle-space'), ('space-station-moon-alt', 'space-station-moon-construction'), ('square-root-alt', 'square-root-variable'), ('star-half-alt', 'star-half-stroke'), ('starfighter-alt', 'starfighter-twin-ion-engine'), ('step-backward', 'backward-step'), ('step-forward', 'forward-step'), ('sticky-note', 'note-sticky'), ('stop-circle', 'circle-stop'), ('store-alt', 'shop'), ('store-alt-slash', 'shop-slash'), ('stream', 'bars-staggered'), ('subway', 'train-subway'), ('surprise', 'face-surprise'), ('swimmer', 'person-swimming'), ('swimming-pool', 'water-ladder'), ('sync', 'arrows-rotate'), ('sync-alt', 'rotate'), ('table-tennis', 'table-tennis-paddle-ball'), ('tablet-alt', 'tablet-screen-button'), ('tablet-android', 'tablet'), ('tablet-android-alt', 'tablet-screen'), ('tachometer', 'gauge-simple'), ('tachometer-alt', 'gauge'), ('tachometer-alt-average', 'gauge-med'), ('tachometer-alt-fast', 'gauge'), ('tachometer-alt-fastest', 'gauge-max'), ('tachometer-alt-slow', 'gauge-low'), ('tachometer-alt-slowest', 'gauge-min'), ('tachometer-average', 'gauge-simple-med'), ('tachometer-fast', 'gauge-simple'), ('tachometer-fastest', 'gauge-simple-max'), ('tachometer-slow', 'gauge-simple-low'), ('tachometer-slowest', 'gauge-simple-min'), ('tanakh', 'book-tanakh'), ('tasks', 'list-check'), ('tasks-alt', 'bars-progress'), ('telegram-plane', 'telegram'), ('temperature-down', 'temperature-arrow-down'), ('temperature-frigid', 'temperature-snow'), ('temperature-hot', 'temperature-sun'), ('temperature-up', 'temperature-arrow-up'), ('tenge', 'tenge-sign'), ('th', 'table-cells'), ('th-large', 'table-cells-large'), ('th-list', 'table-list'), ('theater-masks', 'masks-theater'), ('thermometer-empty', 'temperature-empty'), ('thermometer-full', 'temperature-full'), ('thermometer-half', 'temperature-half'), ('thermometer-quarter', 'temperature-quarter'), ('thermometer-three-quarters', 'temperature-three-quarters'), ('thumb-tack', 'thumbtack'), ('thunderstorm', 'cloud-bolt'), ('thunderstorm-moon', 'cloud-bolt-moon'), ('thunderstorm-sun', 'cloud-bolt-sun'), ('ticket-alt', 'ticket-simple'), ('times', 'xmark'), ('times-circle', 'circle-xmark'), ('times-hexagon', 'hexagon-xmark'), ('times-octagon', 'octagon-xmark'), ('times-square', 'square-xmark'), ('tint', 'droplet'), ('tint-slash', 'droplet-slash'), ('tired', 'face-tired'), ('toilet-paper-alt', 'toilet-paper-blank'), ('tombstone-alt', 'tombstone-blank'), ('tools', 'screwdriver-wrench'), ('torah', 'scroll-torah'), ('tram', 'train-tram'), ('transgender-alt', 'transgender'), ('trash-alt', 'trash-can'), ('trash-restore', 'trash-arrow-up'), ('trash-restore-alt', 'trash-can-arrow-up'), ('trash-undo-alt', 'trash-can-undo'), ('tree-alt', 'tree-deciduous'), ('triangle-music', 'triangle-instrument'), ('trophy-alt', 'trophy-star'), ('truck-couch', 'truck-ramp-couch'), ('truck-loading', 'truck-ramp-box'), ('tshirt', 'shirt'), ('tv-alt', 'tv'), ('undo', 'arrow-rotate-left'), ('undo-alt', 'rotate-left'), ('university', 'building-columns'), ('unlink', 'link-slash'), ('unlock-alt', 'unlock-keyhole'), ('usd-circle', 'circle-dollar'), ('usd-square', 'square-dollar'), ('user-alt', 'user-large'), ('user-alt-slash', 'user-large-slash'), ('user-chart', 'chart-user'), ('user-circle', 'circle-user'), ('user-cog', 'user-gear'), ('user-edit', 'user-pen'), ('user-friends', 'user-group'), ('user-hard-hat', 'user-helmet-safety'), ('user-md', 'user-doctor'), ('user-md-chat', 'user-doctor-message'), ('user-times', 'user-xmark'), ('users-class', 'screen-users'), ('users-cog', 'users-gear'), ('users-crown', 'user-group-crown'), ('utensil-fork', 'fork'), ('utensil-knife', 'knife'), ('utensil-spoon', 'spoon'), ('utensils-alt', 'fork-knife'), ('vhs', 'cassette-vhs'), ('volleyball-ball', 'volleyball'), ('volume-down', 'volume-low'), ('volume-mute', 'volume-xmark'), ('volume-up', 'volume-high'), ('vote-nay', 'xmark-to-slot'), ('vote-yea', 'check-to-slot'), ('walking', 'person-walking'), ('warehouse-alt', 'warehouse-full'), ('washer', 'washing-machine'), ('water-lower', 'water-arrow-down'), ('water-rise', 'water-arrow-up'), ('waveform-path', 'waveform-lines'), ('webcam', 'camera-web'), ('webcam-slash', 'camera-web-slash'), ('weight', 'weight-scale'), ('wifi-1', 'wifi-weak'), ('wifi-2', 'wifi-fair'), ('window-alt', 'window-flip'), ('window-close', 'rectangle-xmark'), ('wine-glass-alt', 'wine-glass-empty')) AS mapping(from_icon, to_icon)\n)\nUPDATE post_action_types\nSET icon =\n CASE\n WHEN icon LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)\n ELSE remaps.to_icon\n END\nFROM remaps\nWHERE icon = remaps.from_icon\n OR icon = CONCAT('fa-', remaps.from_icon)\n OR icon = CONCAT('far-', remaps.from_icon)\n OR icon = CONCAT('fab-', remaps.from_icon)\n OR icon = CONCAT('far fa-', remaps.from_icon)\n OR icon = CONCAT('fab fa-', remaps.from_icon)\n OR icon = CONCAT('fas fa-', remaps.from_icon);\n")
-> 0.0056s
-- execute("UPDATE post_action_types\nSET icon =\nCASE\n WHEN icon LIKE 'fas fa-%' THEN SUBSTRING(icon FROM 8)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fa-%' THEN SUBSTRING(icon FROM 4)\n ELSE icon\nEND\nWHERE icon LIKE 'fa-%'\n OR icon LIKE 'far fa-%'\n OR icon LIKE 'fab fa-%'\n OR icon LIKE 'fas fa-%';\n")
-> 0.0003s
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon FROM (VALUES ('adjust', 'circle-half-stroke'), ('air-freshener', 'spray-can-sparkles'), ('alien-monster', 'alien-8bit'), ('allergies', 'hand-dots'), ('ambulance', 'truck-medical'), ('american-sign-language-interpreting', 'hands-asl-interpreting'), ('analytics', 'chart-mixed'), ('angle-double-down', 'angles-down'), ('angle-double-left', 'angles-left'), ('angle-double-right', 'angles-right'), ('angle-double-up', 'angles-up'), ('angry', 'face-angry'), ('apple-alt', 'apple-whole'), ('apple-crate', 'crate-apple'), ('archive', 'box-archive'), ('arrow-alt-circle-down', 'circle-down'), ('arrow-alt-circle-left', 'circle-left'), ('arrow-alt-circle-right', 'circle-right'), ('arrow-alt-circle-up', 'circle-up'), ('arrow-alt-down', 'down'), ('arrow-alt-from-bottom', 'up-from-line'), ('arrow-alt-from-left', 'right-from-line'), ('arrow-alt-from-right', 'left-from-line'), ('arrow-alt-from-top', 'down-from-line'), ('arrow-alt-left', 'left'), ('arrow-alt-right', 'right'), ('arrow-alt-square-down', 'square-down'), ('arrow-alt-square-left', 'square-left'), ('arrow-alt-square-right', 'square-right'), ('arrow-alt-square-up', 'square-up'), ('arrow-alt-to-bottom', 'down-to-line'), ('arrow-alt-to-left', 'left-to-line'), ('arrow-alt-to-right', 'right-to-line'), ('arrow-alt-to-top', 'up-to-line'), ('arrow-alt-up', 'up'), ('arrow-circle-down', 'circle-arrow-down'), ('arrow-circle-left', 'circle-arrow-left'), ('arrow-circle-right', 'circle-arrow-right'), ('arrow-circle-up', 'circle-arrow-up'), ('arrow-from-bottom', 'arrow-up-from-line'), ('arrow-from-left', 'arrow-right-from-line'), ('arrow-from-right', 'arrow-left-from-line'), ('arrow-from-top', 'arrow-down-from-line'), ('arrow-square-down', 'square-arrow-down'), ('arrow-square-left', 'square-arrow-left'), ('arrow-square-right', 'square-arrow-right'), ('arrow-square-up', 'square-arrow-up'), ('arrow-to-bottom', 'arrow-down-to-line'), ('arrow-to-left', 'arrow-left-to-line'), ('arrow-to-right', 'arrow-right-to-line'), ('arrow-to-top', 'arrow-up-to-line'), ('arrows', 'arrows-up-down-left-right'), ('arrows-alt', 'up-down-left-right'), ('arrows-alt-h', 'left-right'), ('arrows-alt-v', 'up-down'), ('arrows-h', 'arrows-left-right'), ('arrows-v', 'arrows-up-down'), ('assistive-listening-systems', 'ear-listen'), ('atlas', 'book-atlas'), ('atom-alt', 'atom-simple'), ('backspace', 'delete-left'), ('balance-scale', 'scale-balanced'), ('balance-scale-left', 'scale-unbalanced'), ('balance-scale-right', 'scale-unbalanced-flip'), ('band-aid', 'bandage'), ('barcode-alt', 'rectangle-barcode'), ('baseball-ball', 'baseball'), ('basketball-ball', 'basketball'), ('bed-alt', 'bed-front'), ('beer', 'beer-mug-empty'), ('betamax', 'cassette-betamax'), ('bible', 'book-bible'), ('biking', 'person-biking'), ('biking-mountain', 'person-biking-mountain'), ('birthday-cake', 'cake-candles'), ('blind', 'person-walking-with-cane'), ('book-alt', 'book-blank'), ('book-dead', 'book-skull'), ('book-reader', 'book-open-reader'), ('book-spells', 'book-sparkles'), ('border-style', 'border-top-left'), ('border-style-alt', 'border-bottom-right'), ('box-alt', 'box-taped'), ('box-fragile', 'square-fragile'), ('box-full', 'box-open-full'), ('box-up', 'square-this-way-up'), ('box-usd', 'box-dollar'), ('boxes', 'boxes-stacked'), ('boxes-alt', 'boxes-stacked'), ('brackets', 'brackets-square'), ('broadcast-tower', 'tower-broadcast'), ('burn', 'fire-flame-simple'), ('bus-alt', 'bus-simple'), ('calculator-alt', 'calculator-simple'), ('calendar-alt', 'calendar-days'), ('calendar-edit', 'calendar-pen'), ('calendar-times', 'calendar-xmark'), ('camera-alt', 'camera'), ('camera-home', 'camera-security'), ('car-alt', 'car-rear'), ('car-crash', 'car-burst'), ('car-mechanic', 'car-wrench'), ('caravan-alt', 'caravan-simple'), ('caret-circle-down', 'circle-caret-down'), ('caret-circle-left', 'circle-caret-left'), ('caret-circle-right', 'circle-caret-right'), ('caret-circle-up', 'circle-caret-up'), ('caret-square-down', 'square-caret-down'), ('caret-square-left', 'square-caret-left'), ('caret-square-right', 'square-caret-right'), ('caret-square-up', 'square-caret-up'), ('cctv', 'camera-cctv'), ('chalkboard-teacher', 'chalkboard-user'), ('chart-pie-alt', 'chart-pie-simple'), ('check-circle', 'circle-check'), ('check-square', 'square-check'), ('cheeseburger', 'burger-cheese'), ('chess-bishop-alt', 'chess-bishop-piece'), ('chess-clock-alt', 'chess-clock-flip'), ('chess-king-alt', 'chess-king-piece'), ('chess-knight-alt', 'chess-knight-piece'), ('chess-pawn-alt', 'chess-pawn-piece'), ('chess-queen-alt', 'chess-queen-piece'), ('chess-rook-alt', 'chess-rook-piece'), ('chevron-circle-down', 'circle-chevron-down'), ('chevron-circle-left', 'circle-chevron-left'), ('chevron-circle-right', 'circle-chevron-right'), ('chevron-circle-up', 'circle-chevron-up'), ('chevron-double-down', 'chevrons-down'), ('chevron-double-left', 'chevrons-left'), ('chevron-double-right', 'chevrons-right'), ('chevron-double-up', 'chevrons-up'), ('chevron-square-down', 'square-chevron-down'), ('chevron-square-left', 'square-chevron-left'), ('chevron-square-right', 'square-chevron-right'), ('chevron-square-up', 'square-chevron-up'), ('clinic-medical', 'house-chimney-medical'), ('cloud-download', 'cloud-arrow-down'), ('cloud-download-alt', 'cloud-arrow-down'), ('cloud-upload', 'cloud-arrow-up'), ('cloud-upload-alt', 'cloud-arrow-up'), ('cocktail', 'martini-glass-citrus'), ('coffee', 'mug-saucer'), ('coffee-togo', 'cup-togo'), ('cog', 'gear'), ('cogs', 'gears'), ('columns', 'table-columns'), ('comment-alt', 'message'), ('comment-alt-check', 'message-check'), ('comment-alt-dollar', 'message-dollar'), ('comment-alt-dots', 'message-dots'), ('comment-alt-edit', 'message-pen'), ('comment-alt-exclamation', 'message-exclamation'), ('comment-alt-lines', 'message-lines'), ('comment-alt-medical', 'message-medical'), ('comment-alt-minus', 'message-minus'), ('comment-alt-music', 'message-music'), ('comment-alt-plus', 'message-plus'), ('comment-alt-slash', 'message-slash'), ('comment-alt-smile', 'message-smile'), ('comment-alt-times', 'message-xmark'), ('comment-edit', 'comment-pen'), ('comment-times', 'comment-xmark'), ('comments-alt', 'messages'), ('comments-alt-dollar', 'messages-dollar'), ('compress-alt', 'down-left-and-up-right-to-center'), ('compress-arrows-alt', 'minimize'), ('concierge-bell', 'bell-concierge'), ('construction', 'triangle-person-digging'), ('conveyor-belt-alt', 'conveyor-belt-boxes'), ('cowbell-more', 'cowbell-circle-plus'), ('cricket', 'cricket-bat-ball'), ('crop-alt', 'crop-simple'), ('curling', 'curling-stone'), ('cut', 'scissors'), ('deaf', 'ear-deaf'), ('debug', 'ban-bug'), ('desktop-alt', 'desktop'), ('dewpoint', 'droplet-degree'), ('diagnoses', 'person-dots-from-line'), ('digging', 'person-digging'), ('digital-tachograph', 'tachograph-digital'), ('directions', 'diamond-turn-right'), ('dizzy', 'face-dizzy'), ('dolly-flatbed', 'cart-flatbed'), ('dolly-flatbed-alt', 'cart-flatbed-boxes'), ('dolly-flatbed-empty', 'cart-flatbed-empty'), ('donate', 'circle-dollar-to-slot'), ('dot-circle', 'circle-dot'), ('drafting-compass', 'compass-drafting'), ('drone-alt', 'drone-front'), ('dryer-alt', 'dryer-heat'), ('eclipse-alt', 'moon-over-sun'), ('edit', 'pen-to-square'), ('ellipsis-h', 'ellipsis'), ('ellipsis-h-alt', 'ellipsis-stroke'), ('ellipsis-v', 'ellipsis-vertical'), ('ellipsis-v-alt', 'ellipsis-stroke-vertical'), ('envelope-square', 'square-envelope'), ('exchange', 'arrow-right-arrow-left'), ('exchange-alt', 'right-left'), ('exclamation-circle', 'circle-exclamation'), ('exclamation-square', 'square-exclamation'), ('exclamation-triangle', 'triangle-exclamation'), ('expand-alt', 'up-right-and-down-left-from-center'), ('expand-arrows', 'arrows-maximize'), ('expand-arrows-alt', 'maximize'), ('external-link', 'arrow-up-right-from-square'), ('external-link-alt', 'up-right-from-square'), ('external-link-square', 'square-arrow-up-right'), ('external-link-square-alt', 'square-up-right'), ('eyedropper', 'eye-dropper'), ('fast-backward', 'backward-fast'), ('fast-forward', 'forward-fast'), ('feather-alt', 'feather-pointed'), ('female', 'person-dress'), ('field-hockey', 'field-hockey-stick-ball'), ('fighter-jet', 'jet-fighter'), ('file-alt', 'file-lines'), ('file-archive', 'file-zipper'), ('file-chart-line', 'file-chart-column'), ('file-download', 'file-arrow-down'), ('file-edit', 'file-pen'), ('file-medical-alt', 'file-waveform'), ('file-search', 'file-magnifying-glass'), ('file-times', 'file-xmark'), ('file-upload', 'file-arrow-up'), ('film-alt', 'film-simple'), ('fire-alt', 'fire-flame-curved'), ('first-aid', 'kit-medical'), ('fist-raised', 'hand-fist'), ('flag-alt', 'flag-swallowtail'), ('flame', 'fire-flame'), ('flask-poison', 'flask-round-poison'), ('flask-potion', 'flask-round-potion'), ('flushed', 'face-flushed'), ('fog', 'cloud-fog'), ('folder-download', 'folder-arrow-down'), ('folder-times', 'folder-xmark'), ('folder-upload', 'folder-arrow-up'), ('font-awesome-alt', 'square-font-awesome-stroke'), ('font-awesome-flag', 'font-awesome'), ('font-awesome-logo-full', 'font-awesome'), ('football-ball', 'football'), ('fragile', 'wine-glass-crack'), ('frosty-head', 'snowman-head'), ('frown', 'face-frown'), ('frown-open', 'face-frown-open'), ('funnel-dollar', 'filter-circle-dollar'), ('game-board-alt', 'game-board-simple'), ('gamepad-alt', 'gamepad-modern'), ('glass-champagne', 'champagne-glass'), ('glass-cheers', 'champagne-glasses'), ('glass-martini', 'martini-glass-empty'), ('glass-martini-alt', 'martini-glass'), ('glass-whiskey', 'whiskey-glass'), ('glass-whiskey-rocks', 'whiskey-glass-ice'), ('glasses-alt', 'glasses-round'), ('globe-africa', 'earth-africa'), ('globe-americas', 'earth-americas'), ('globe-asia', 'earth-asia'), ('globe-europe', 'earth-europe'), ('golf-ball', 'golf-ball-tee'), ('grimace', 'face-grimace'), ('grin', 'face-grin'), ('grin-alt', 'face-grin-wide'), ('grin-beam', 'face-grin-beam'), ('grin-beam-sweat', 'face-grin-beam-sweat'), ('grin-hearts', 'face-grin-hearts'), ('grin-squint', 'face-grin-squint'), ('grin-squint-tears', 'face-grin-squint-tears'), ('grin-stars', 'face-grin-stars'), ('grin-tears', 'face-grin-tears'), ('grin-tongue', 'face-grin-tongue'), ('grin-tongue-squint', 'face-grin-tongue-squint'), ('grin-tongue-wink', 'face-grin-tongue-wink'), ('grin-wink', 'face-grin-wink'), ('grip-horizontal', 'grip'), ('h-square', 'square-h'), ('hamburger', 'burger'), ('hand-holding-usd', 'hand-holding-dollar'), ('hand-holding-water', 'hand-holding-droplet'), ('hand-paper', 'hand'), ('hand-receiving', 'hands-holding-diamond'), ('hand-rock', 'hand-back-fist'), ('hands-heart', 'hands-holding-heart'), ('hands-helping', 'handshake-angle'), ('hands-usd', 'hands-holding-dollar'), ('hands-wash', 'hands-bubbles'), ('handshake-alt', 'handshake-simple'), ('handshake-alt-slash', 'handshake-simple-slash'), ('hard-hat', 'helmet-safety'), ('hdd', 'hard-drive'), ('head-vr', 'head-side-goggles'), ('headphones-alt', 'headphones-simple'), ('heart-broken', 'heart-crack'), ('heart-circle', 'circle-heart'), ('heart-rate', 'wave-pulse'), ('heart-square', 'square-heart'), ('heartbeat', 'heart-pulse'), ('hiking', 'person-hiking'), ('history', 'clock-rotate-left'), ('home', 'house'), ('home-alt', 'house'), ('home-heart', 'house-heart'), ('home-lg', 'house-chimney'), ('home-lg-alt', 'house'), ('hospital-alt', 'hospital'), ('hospital-symbol', 'circle-h'), ('hot-tub', 'hot-tub-person'), ('hourglass-half', 'hourglass'), ('house-damage', 'house-chimney-crack'), ('house-leave', 'house-person-leave'), ('house-return', 'house-person-return'), ('hryvnia', 'hryvnia-sign'), ('humidity', 'droplet-percent'), ('icons-alt', 'symbols'), ('id-card-alt', 'id-card-clip'), ('industry-alt', 'industry-windows'), ('info-circle', 'circle-info'), ('info-square', 'square-info'), ('innosoft', '42-group'), ('inventory', 'shelves'), ('journal-whills', 'book-journal-whills'), ('kiss', 'face-kiss'), ('kiss-beam', 'face-kiss-beam'), ('kiss-wink-heart', 'face-kiss-wink-heart'), ('landmark-alt', 'landmark-dome'), ('laptop-house', 'house-laptop'), ('laugh', 'face-laugh'), ('laugh-beam', 'face-laugh-beam'), ('laugh-squint', 'face-laugh-squint'), ('laugh-wink', 'face-laugh-wink'), ('level-down', 'arrow-turn-down'), ('level-down-alt', 'turn-down'), ('level-up', 'arrow-turn-up'), ('level-up-alt', 'turn-up'), ('list-alt', 'rectangle-list'), ('location', 'location-crosshairs'), ('location-circle', 'circle-location-arrow'), ('location-slash', 'location-crosshairs-slash'), ('lock-alt', 'lock-keyhole'), ('lock-open-alt', 'lock-keyhole-open'), ('long-arrow-alt-down', 'down-long'), ('long-arrow-alt-left', 'left-long'), ('long-arrow-alt-right', 'right-long'), ('long-arrow-alt-up', 'up-long'), ('long-arrow-down', 'arrow-down-long'), ('long-arrow-left', 'arrow-left-long'), ('long-arrow-right', 'arrow-right-long'), ('long-arrow-up', 'arrow-up-long'), ('low-vision', 'eye-low-vision'), ('luchador', 'luchador-mask'), ('luggage-cart', 'cart-flatbed-suitcase'), ('magic', 'wand-magic'), ('mail-bulk', 'envelopes-bulk'), ('male', 'person'), ('map-marked', 'map-location'), ('map-marked-alt', 'map-location-dot'), ('map-marker', 'location-pin'), ('map-marker-alt', 'location-dot'), ('map-marker-alt-slash', 'location-dot-slash'), ('map-marker-check', 'location-check'), ('map-marker-edit', 'location-pen'), ('map-marker-exclamation', 'location-exclamation'), ('map-marker-minus', 'location-minus'), ('map-marker-plus', 'location-plus'), ('map-marker-question', 'location-question'), ('map-marker-slash', 'location-pin-slash'), ('map-marker-smile', 'location-smile'), ('map-marker-times', 'location-xmark'), ('map-signs', 'signs-post'), ('mars-stroke-h', 'mars-stroke-right'), ('mars-stroke-v', 'mars-stroke-up'), ('medium-m', 'medium'), ('medkit', 'suitcase-medical'), ('meh', 'face-meh'), ('meh-blank', 'face-meh-blank'), ('meh-rolling-eyes', 'face-rolling-eyes'), ('microphone-alt', 'microphone-lines'), ('microphone-alt-slash', 'microphone-lines-slash'), ('mind-share', 'brain-arrow-curved-right'), ('minus-circle', 'circle-minus'), ('minus-hexagon', 'hexagon-minus'), ('minus-octagon', 'octagon-minus'), ('minus-square', 'square-minus'), ('mobile-alt', 'mobile-screen-button'), ('mobile-android', 'mobile'), ('mobile-android-alt', 'mobile-screen'), ('money-bill-alt', 'money-bill-1'), ('money-bill-wave-alt', 'money-bill-1-wave'), ('money-check-alt', 'money-check-dollar'), ('money-check-edit', 'money-check-pen'), ('money-check-edit-alt', 'money-check-dollar-pen'), ('monitor-heart-rate', 'monitor-waveform'), ('mouse', 'computer-mouse'), ('mouse-alt', 'computer-mouse-scrollwheel'), ('mouse-pointer', 'arrow-pointer'), ('music-alt', 'music-note'), ('music-alt-slash', 'music-note-slash'), ('oil-temp', 'oil-temperature'), ('page-break', 'file-dashed-line'), ('paint-brush', 'paintbrush'), ('paint-brush-alt', 'paintbrush-fine'), ('paint-brush-fine', 'paintbrush-fine'), ('pallet-alt', 'pallet-boxes'), ('paragraph-rtl', 'paragraph-left'), ('parking', 'square-parking'), ('parking-circle', 'circle-parking'), ('parking-circle-slash', 'ban-parking'), ('parking-slash', 'square-parking-slash'), ('pastafarianism', 'spaghetti-monster-flying'), ('pause-circle', 'circle-pause'), ('paw-alt', 'paw-simple'), ('pen-alt', 'pen-clip'), ('pen-square', 'square-pen'), ('pencil-alt', 'pencil'), ('pencil-paintbrush', 'pen-paintbrush'), ('pencil-ruler', 'pen-ruler'), ('pennant', 'flag-pennant'), ('people-arrows', 'people-arrows-left-right'), ('people-carry', 'people-carry-box'), ('percentage', 'percent'), ('person-carry', 'person-carry-box'), ('phone-alt', 'phone-flip'), ('phone-laptop', 'laptop-mobile'), ('phone-square', 'square-phone'), ('phone-square-alt', 'square-phone-flip'), ('photo-video', 'photo-film'), ('plane-alt', 'plane-engines'), ('play-circle', 'circle-play'), ('plus-circle', 'circle-plus'), ('plus-hexagon', 'hexagon-plus'), ('plus-octagon', 'octagon-plus'), ('plus-square', 'square-plus'), ('poll', 'square-poll-vertical'), ('poll-h', 'square-poll-horizontal'), ('portal-enter', 'person-to-portal'), ('portal-exit', 'person-from-portal'), ('portrait', 'image-portrait'), ('pound-sign', 'sterling-sign'), ('pray', 'person-praying'), ('praying-hands', 'hands-praying'), ('prescription-bottle-alt', 'prescription-bottle-medical'), ('presentation', 'presentation-screen'), ('print-search', 'print-magnifying-glass'), ('procedures', 'bed-pulse'), ('project-diagram', 'diagram-project'), ('question-circle', 'circle-question'), ('question-square', 'square-question'), ('quran', 'book-quran'), ('rabbit-fast', 'rabbit-running'), ('radiation-alt', 'circle-radiation'), ('radio-alt', 'radio-tuner'), ('random', 'shuffle'), ('rectangle-landscape', 'rectangle'), ('rectangle-portrait', 'rectangle-vertical'), ('redo', 'arrow-rotate-right'), ('redo-alt', 'rotate-right'), ('remove-format', 'text-slash'), ('repeat-1-alt', 'arrows-repeat-1'), ('repeat-alt', 'arrows-repeat'), ('retweet-alt', 'arrows-retweet'), ('rss-square', 'square-rss'), ('running', 'person-running'), ('sad-cry', 'face-sad-cry'), ('sad-tear', 'face-sad-tear'), ('save', 'floppy-disk'), ('sax-hot', 'saxophone-fire'), ('scalpel-path', 'scalpel-line-dashed'), ('scanner-image', 'scanner'), ('search', 'magnifying-glass'), ('search-dollar', 'magnifying-glass-dollar'), ('search-location', 'magnifying-glass-location'), ('search-minus', 'magnifying-glass-minus'), ('search-plus', 'magnifying-glass-plus'), ('sensor-alert', 'sensor-triangle-exclamation'), ('sensor-smoke', 'sensor-cloud'), ('share-alt', 'share-nodes'), ('share-alt-square', 'square-share-nodes'), ('share-square', 'share-from-square'), ('shield-alt', 'shield-halved'), ('shipping-fast', 'truck-fast'), ('shipping-timed', 'truck-clock'), ('shopping-bag', 'bag-shopping'), ('shopping-basket', 'basket-shopping'), ('shopping-cart', 'cart-shopping'), ('shuttle-van', 'van-shuttle'), ('sign', 'sign-hanging'), ('sign-in', 'arrow-right-to-bracket'), ('sign-in-alt', 'right-to-bracket'), ('sign-language', 'hands'), ('sign-out', 'arrow-right-from-bracket'), ('sign-out-alt', 'right-from-bracket'), ('signal-1', 'signal-weak'), ('signal-2', 'signal-fair'), ('signal-3', 'signal-good'), ('signal-4', 'signal-strong'), ('signal-alt', 'signal-bars'), ('signal-alt-1', 'signal-bars-weak'), ('signal-alt-2', 'signal-bars-fair'), ('signal-alt-3', 'signal-bars-good'), ('signal-alt-slash', 'signal-bars-slash'), ('skating', 'person-skating'), ('ski-jump', 'person-ski-jumping'), ('ski-lift', 'person-ski-lift'), ('skiing', 'person-skiing'), ('skiing-nordic', 'person-skiing-nordic'), ('slack-hash', 'slack'), ('sledding', 'person-sledding'), ('sliders-h', 'sliders'), ('sliders-h-square', 'square-sliders'), ('sliders-v', 'sliders-up'), ('sliders-v-square', 'square-sliders-vertical'), ('smile', 'face-smile'), ('smile-beam', 'face-smile-beam'), ('smile-plus', 'face-smile-plus'), ('smile-wink', 'face-smile-wink'), ('smoking-ban', 'ban-smoking'), ('sms', 'comment-sms'), ('snapchat-ghost', 'snapchat'), ('snowboarding', 'person-snowboarding'), ('snowmobile', 'person-snowmobiling'), ('sort-alpha-down', 'arrow-down-a-z'), ('sort-alpha-down-alt', 'arrow-down-z-a'), ('sort-alpha-up', 'arrow-up-a-z'), ('sort-alpha-up-alt', 'arrow-up-z-a'), ('sort-alt', 'arrow-down-arrow-up'), ('sort-amount-down', 'arrow-down-wide-short'), ('sort-amount-down-alt', 'arrow-down-short-wide'), ('sort-amount-up', 'arrow-up-wide-short'), ('sort-amount-up-alt', 'arrow-up-short-wide'), ('sort-circle', 'circle-sort'), ('sort-circle-down', 'circle-sort-down'), ('sort-circle-up', 'circle-sort-up'), ('sort-numeric-down', 'arrow-down-1-9'), ('sort-numeric-down-alt', 'arrow-down-9-1'), ('sort-numeric-up', 'arrow-up-1-9'), ('sort-numeric-up-alt', 'arrow-up-9-1'), ('sort-shapes-down', 'arrow-down-triangle-square'), ('sort-shapes-down-alt', 'arrow-down-square-triangle'), ('sort-shapes-up', 'arrow-up-triangle-square'), ('sort-shapes-up-alt', 'arrow-up-square-triangle'), ('sort-size-down', 'arrow-down-big-small'), ('sort-size-down-alt', 'arrow-down-small-big'), ('sort-size-up', 'arrow-up-big-small'), ('sort-size-up-alt', 'arrow-up-small-big'), ('soup', 'bowl-hot'), ('space-shuttle', 'shuttle-space'), ('space-station-moon-alt', 'space-station-moon-construction'), ('square-root-alt', 'square-root-variable'), ('star-half-alt', 'star-half-stroke'), ('starfighter-alt', 'starfighter-twin-ion-engine'), ('step-backward', 'backward-step'), ('step-forward', 'forward-step'), ('sticky-note', 'note-sticky'), ('stop-circle', 'circle-stop'), ('store-alt', 'shop'), ('store-alt-slash', 'shop-slash'), ('stream', 'bars-staggered'), ('subway', 'train-subway'), ('surprise', 'face-surprise'), ('swimmer', 'person-swimming'), ('swimming-pool', 'water-ladder'), ('sync', 'arrows-rotate'), ('sync-alt', 'rotate'), ('table-tennis', 'table-tennis-paddle-ball'), ('tablet-alt', 'tablet-screen-button'), ('tablet-android', 'tablet'), ('tablet-android-alt', 'tablet-screen'), ('tachometer', 'gauge-simple'), ('tachometer-alt', 'gauge'), ('tachometer-alt-average', 'gauge-med'), ('tachometer-alt-fast', 'gauge'), ('tachometer-alt-fastest', 'gauge-max'), ('tachometer-alt-slow', 'gauge-low'), ('tachometer-alt-slowest', 'gauge-min'), ('tachometer-average', 'gauge-simple-med'), ('tachometer-fast', 'gauge-simple'), ('tachometer-fastest', 'gauge-simple-max'), ('tachometer-slow', 'gauge-simple-low'), ('tachometer-slowest', 'gauge-simple-min'), ('tanakh', 'book-tanakh'), ('tasks', 'list-check'), ('tasks-alt', 'bars-progress'), ('telegram-plane', 'telegram'), ('temperature-down', 'temperature-arrow-down'), ('temperature-frigid', 'temperature-snow'), ('temperature-hot', 'temperature-sun'), ('temperature-up', 'temperature-arrow-up'), ('tenge', 'tenge-sign'), ('th', 'table-cells'), ('th-large', 'table-cells-large'), ('th-list', 'table-list'), ('theater-masks', 'masks-theater'), ('thermometer-empty', 'temperature-empty'), ('thermometer-full', 'temperature-full'), ('thermometer-half', 'temperature-half'), ('thermometer-quarter', 'temperature-quarter'), ('thermometer-three-quarters', 'temperature-three-quarters'), ('thumb-tack', 'thumbtack'), ('thunderstorm', 'cloud-bolt'), ('thunderstorm-moon', 'cloud-bolt-moon'), ('thunderstorm-sun', 'cloud-bolt-sun'), ('ticket-alt', 'ticket-simple'), ('times', 'xmark'), ('times-circle', 'circle-xmark'), ('times-hexagon', 'hexagon-xmark'), ('times-octagon', 'octagon-xmark'), ('times-square', 'square-xmark'), ('tint', 'droplet'), ('tint-slash', 'droplet-slash'), ('tired', 'face-tired'), ('toilet-paper-alt', 'toilet-paper-blank'), ('tombstone-alt', 'tombstone-blank'), ('tools', 'screwdriver-wrench'), ('torah', 'scroll-torah'), ('tram', 'train-tram'), ('transgender-alt', 'transgender'), ('trash-alt', 'trash-can'), ('trash-restore', 'trash-arrow-up'), ('trash-restore-alt', 'trash-can-arrow-up'), ('trash-undo-alt', 'trash-can-undo'), ('tree-alt', 'tree-deciduous'), ('triangle-music', 'triangle-instrument'), ('trophy-alt', 'trophy-star'), ('truck-couch', 'truck-ramp-couch'), ('truck-loading', 'truck-ramp-box'), ('tshirt', 'shirt'), ('tv-alt', 'tv'), ('undo', 'arrow-rotate-left'), ('undo-alt', 'rotate-left'), ('university', 'building-columns'), ('unlink', 'link-slash'), ('unlock-alt', 'unlock-keyhole'), ('usd-circle', 'circle-dollar'), ('usd-square', 'square-dollar'), ('user-alt', 'user-large'), ('user-alt-slash', 'user-large-slash'), ('user-chart', 'chart-user'), ('user-circle', 'circle-user'), ('user-cog', 'user-gear'), ('user-edit', 'user-pen'), ('user-friends', 'user-group'), ('user-hard-hat', 'user-helmet-safety'), ('user-md', 'user-doctor'), ('user-md-chat', 'user-doctor-message'), ('user-times', 'user-xmark'), ('users-class', 'screen-users'), ('users-cog', 'users-gear'), ('users-crown', 'user-group-crown'), ('utensil-fork', 'fork'), ('utensil-knife', 'knife'), ('utensil-spoon', 'spoon'), ('utensils-alt', 'fork-knife'), ('vhs', 'cassette-vhs'), ('volleyball-ball', 'volleyball'), ('volume-down', 'volume-low'), ('volume-mute', 'volume-xmark'), ('volume-up', 'volume-high'), ('vote-nay', 'xmark-to-slot'), ('vote-yea', 'check-to-slot'), ('walking', 'person-walking'), ('warehouse-alt', 'warehouse-full'), ('washer', 'washing-machine'), ('water-lower', 'water-arrow-down'), ('water-rise', 'water-arrow-up'), ('waveform-path', 'waveform-lines'), ('webcam', 'camera-web'), ('webcam-slash', 'camera-web-slash'), ('weight', 'weight-scale'), ('wifi-1', 'wifi-weak'), ('wifi-2', 'wifi-fair'), ('window-alt', 'window-flip'), ('window-close', 'rectangle-xmark'), ('wine-glass-alt', 'wine-glass-empty')) AS mapping(from_icon, to_icon)\n)\nUPDATE badges\nSET icon =\n CASE\n WHEN icon LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)\n ELSE remaps.to_icon\n END\nFROM remaps\nWHERE icon = remaps.from_icon\n OR icon = CONCAT('fa-', remaps.from_icon)\n OR icon = CONCAT('far-', remaps.from_icon)\n OR icon = CONCAT('fab-', remaps.from_icon)\n OR icon = CONCAT('far fa-', remaps.from_icon)\n OR icon = CONCAT('fab fa-', remaps.from_icon)\n OR icon = CONCAT('fas fa-', remaps.from_icon);\n")
-> 0.0303s
-- execute("UPDATE badges\nSET icon =\nCASE\n WHEN icon LIKE 'fas fa-%' THEN SUBSTRING(icon FROM 8)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fa-%' THEN SUBSTRING(icon FROM 4)\n ELSE icon\nEND\nWHERE icon LIKE 'fa-%'\n OR icon LIKE 'far fa-%'\n OR icon LIKE 'fab fa-%'\n OR icon LIKE 'fas fa-%';\n")
-> 0.0005s
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon FROM (VALUES ('adjust', 'circle-half-stroke'), ('air-freshener', 'spray-can-sparkles'), ('alien-monster', 'alien-8bit'), ('allergies', 'hand-dots'), ('ambulance', 'truck-medical'), ('american-sign-language-interpreting', 'hands-asl-interpreting'), ('analytics', 'chart-mixed'), ('angle-double-down', 'angles-down'), ('angle-double-left', 'angles-left'), ('angle-double-right', 'angles-right'), ('angle-double-up', 'angles-up'), ('angry', 'face-angry'), ('apple-alt', 'apple-whole'), ('apple-crate', 'crate-apple'), ('archive', 'box-archive'), ('arrow-alt-circle-down', 'circle-down'), ('arrow-alt-circle-left', 'circle-left'), ('arrow-alt-circle-right', 'circle-right'), ('arrow-alt-circle-up', 'circle-up'), ('arrow-alt-down', 'down'), ('arrow-alt-from-bottom', 'up-from-line'), ('arrow-alt-from-left', 'right-from-line'), ('arrow-alt-from-right', 'left-from-line'), ('arrow-alt-from-top', 'down-from-line'), ('arrow-alt-left', 'left'), ('arrow-alt-right', 'right'), ('arrow-alt-square-down', 'square-down'), ('arrow-alt-square-left', 'square-left'), ('arrow-alt-square-right', 'square-right'), ('arrow-alt-square-up', 'square-up'), ('arrow-alt-to-bottom', 'down-to-line'), ('arrow-alt-to-left', 'left-to-line'), ('arrow-alt-to-right', 'right-to-line'), ('arrow-alt-to-top', 'up-to-line'), ('arrow-alt-up', 'up'), ('arrow-circle-down', 'circle-arrow-down'), ('arrow-circle-left', 'circle-arrow-left'), ('arrow-circle-right', 'circle-arrow-right'), ('arrow-circle-up', 'circle-arrow-up'), ('arrow-from-bottom', 'arrow-up-from-line'), ('arrow-from-left', 'arrow-right-from-line'), ('arrow-from-right', 'arrow-left-from-line'), ('arrow-from-top', 'arrow-down-from-line'), ('arrow-square-down', 'square-arrow-down'), ('arrow-square-left', 'square-arrow-left'), ('arrow-square-right', 'square-arrow-right'), ('arrow-square-up', 'square-arrow-up'), ('arrow-to-bottom', 'arrow-down-to-line'), ('arrow-to-left', 'arrow-left-to-line'), ('arrow-to-right', 'arrow-right-to-line'), ('arrow-to-top', 'arrow-up-to-line'), ('arrows', 'arrows-up-down-left-right'), ('arrows-alt', 'up-down-left-right'), ('arrows-alt-h', 'left-right'), ('arrows-alt-v', 'up-down'), ('arrows-h', 'arrows-left-right'), ('arrows-v', 'arrows-up-down'), ('assistive-listening-systems', 'ear-listen'), ('atlas', 'book-atlas'), ('atom-alt', 'atom-simple'), ('backspace', 'delete-left'), ('balance-scale', 'scale-balanced'), ('balance-scale-left', 'scale-unbalanced'), ('balance-scale-right', 'scale-unbalanced-flip'), ('band-aid', 'bandage'), ('barcode-alt', 'rectangle-barcode'), ('baseball-ball', 'baseball'), ('basketball-ball', 'basketball'), ('bed-alt', 'bed-front'), ('beer', 'beer-mug-empty'), ('betamax', 'cassette-betamax'), ('bible', 'book-bible'), ('biking', 'person-biking'), ('biking-mountain', 'person-biking-mountain'), ('birthday-cake', 'cake-candles'), ('blind', 'person-walking-with-cane'), ('book-alt', 'book-blank'), ('book-dead', 'book-skull'), ('book-reader', 'book-open-reader'), ('book-spells', 'book-sparkles'), ('border-style', 'border-top-left'), ('border-style-alt', 'border-bottom-right'), ('box-alt', 'box-taped'), ('box-fragile', 'square-fragile'), ('box-full', 'box-open-full'), ('box-up', 'square-this-way-up'), ('box-usd', 'box-dollar'), ('boxes', 'boxes-stacked'), ('boxes-alt', 'boxes-stacked'), ('brackets', 'brackets-square'), ('broadcast-tower', 'tower-broadcast'), ('burn', 'fire-flame-simple'), ('bus-alt', 'bus-simple'), ('calculator-alt', 'calculator-simple'), ('calendar-alt', 'calendar-days'), ('calendar-edit', 'calendar-pen'), ('calendar-times', 'calendar-xmark'), ('camera-alt', 'camera'), ('camera-home', 'camera-security'), ('car-alt', 'car-rear'), ('car-crash', 'car-burst'), ('car-mechanic', 'car-wrench'), ('caravan-alt', 'caravan-simple'), ('caret-circle-down', 'circle-caret-down'), ('caret-circle-left', 'circle-caret-left'), ('caret-circle-right', 'circle-caret-right'), ('caret-circle-up', 'circle-caret-up'), ('caret-square-down', 'square-caret-down'), ('caret-square-left', 'square-caret-left'), ('caret-square-right', 'square-caret-right'), ('caret-square-up', 'square-caret-up'), ('cctv', 'camera-cctv'), ('chalkboard-teacher', 'chalkboard-user'), ('chart-pie-alt', 'chart-pie-simple'), ('check-circle', 'circle-check'), ('check-square', 'square-check'), ('cheeseburger', 'burger-cheese'), ('chess-bishop-alt', 'chess-bishop-piece'), ('chess-clock-alt', 'chess-clock-flip'), ('chess-king-alt', 'chess-king-piece'), ('chess-knight-alt', 'chess-knight-piece'), ('chess-pawn-alt', 'chess-pawn-piece'), ('chess-queen-alt', 'chess-queen-piece'), ('chess-rook-alt', 'chess-rook-piece'), ('chevron-circle-down', 'circle-chevron-down'), ('chevron-circle-left', 'circle-chevron-left'), ('chevron-circle-right', 'circle-chevron-right'), ('chevron-circle-up', 'circle-chevron-up'), ('chevron-double-down', 'chevrons-down'), ('chevron-double-left', 'chevrons-left'), ('chevron-double-right', 'chevrons-right'), ('chevron-double-up', 'chevrons-up'), ('chevron-square-down', 'square-chevron-down'), ('chevron-square-left', 'square-chevron-left'), ('chevron-square-right', 'square-chevron-right'), ('chevron-square-up', 'square-chevron-up'), ('clinic-medical', 'house-chimney-medical'), ('cloud-download', 'cloud-arrow-down'), ('cloud-download-alt', 'cloud-arrow-down'), ('cloud-upload', 'cloud-arrow-up'), ('cloud-upload-alt', 'cloud-arrow-up'), ('cocktail', 'martini-glass-citrus'), ('coffee', 'mug-saucer'), ('coffee-togo', 'cup-togo'), ('cog', 'gear'), ('cogs', 'gears'), ('columns', 'table-columns'), ('comment-alt', 'message'), ('comment-alt-check', 'message-check'), ('comment-alt-dollar', 'message-dollar'), ('comment-alt-dots', 'message-dots'), ('comment-alt-edit', 'message-pen'), ('comment-alt-exclamation', 'message-exclamation'), ('comment-alt-lines', 'message-lines'), ('comment-alt-medical', 'message-medical'), ('comment-alt-minus', 'message-minus'), ('comment-alt-music', 'message-music'), ('comment-alt-plus', 'message-plus'), ('comment-alt-slash', 'message-slash'), ('comment-alt-smile', 'message-smile'), ('comment-alt-times', 'message-xmark'), ('comment-edit', 'comment-pen'), ('comment-times', 'comment-xmark'), ('comments-alt', 'messages'), ('comments-alt-dollar', 'messages-dollar'), ('compress-alt', 'down-left-and-up-right-to-center'), ('compress-arrows-alt', 'minimize'), ('concierge-bell', 'bell-concierge'), ('construction', 'triangle-person-digging'), ('conveyor-belt-alt', 'conveyor-belt-boxes'), ('cowbell-more', 'cowbell-circle-plus'), ('cricket', 'cricket-bat-ball'), ('crop-alt', 'crop-simple'), ('curling', 'curling-stone'), ('cut', 'scissors'), ('deaf', 'ear-deaf'), ('debug', 'ban-bug'), ('desktop-alt', 'desktop'), ('dewpoint', 'droplet-degree'), ('diagnoses', 'person-dots-from-line'), ('digging', 'person-digging'), ('digital-tachograph', 'tachograph-digital'), ('directions', 'diamond-turn-right'), ('dizzy', 'face-dizzy'), ('dolly-flatbed', 'cart-flatbed'), ('dolly-flatbed-alt', 'cart-flatbed-boxes'), ('dolly-flatbed-empty', 'cart-flatbed-empty'), ('donate', 'circle-dollar-to-slot'), ('dot-circle', 'circle-dot'), ('drafting-compass', 'compass-drafting'), ('drone-alt', 'drone-front'), ('dryer-alt', 'dryer-heat'), ('eclipse-alt', 'moon-over-sun'), ('edit', 'pen-to-square'), ('ellipsis-h', 'ellipsis'), ('ellipsis-h-alt', 'ellipsis-stroke'), ('ellipsis-v', 'ellipsis-vertical'), ('ellipsis-v-alt', 'ellipsis-stroke-vertical'), ('envelope-square', 'square-envelope'), ('exchange', 'arrow-right-arrow-left'), ('exchange-alt', 'right-left'), ('exclamation-circle', 'circle-exclamation'), ('exclamation-square', 'square-exclamation'), ('exclamation-triangle', 'triangle-exclamation'), ('expand-alt', 'up-right-and-down-left-from-center'), ('expand-arrows', 'arrows-maximize'), ('expand-arrows-alt', 'maximize'), ('external-link', 'arrow-up-right-from-square'), ('external-link-alt', 'up-right-from-square'), ('external-link-square', 'square-arrow-up-right'), ('external-link-square-alt', 'square-up-right'), ('eyedropper', 'eye-dropper'), ('fast-backward', 'backward-fast'), ('fast-forward', 'forward-fast'), ('feather-alt', 'feather-pointed'), ('female', 'person-dress'), ('field-hockey', 'field-hockey-stick-ball'), ('fighter-jet', 'jet-fighter'), ('file-alt', 'file-lines'), ('file-archive', 'file-zipper'), ('file-chart-line', 'file-chart-column'), ('file-download', 'file-arrow-down'), ('file-edit', 'file-pen'), ('file-medical-alt', 'file-waveform'), ('file-search', 'file-magnifying-glass'), ('file-times', 'file-xmark'), ('file-upload', 'file-arrow-up'), ('film-alt', 'film-simple'), ('fire-alt', 'fire-flame-curved'), ('first-aid', 'kit-medical'), ('fist-raised', 'hand-fist'), ('flag-alt', 'flag-swallowtail'), ('flame', 'fire-flame'), ('flask-poison', 'flask-round-poison'), ('flask-potion', 'flask-round-potion'), ('flushed', 'face-flushed'), ('fog', 'cloud-fog'), ('folder-download', 'folder-arrow-down'), ('folder-times', 'folder-xmark'), ('folder-upload', 'folder-arrow-up'), ('font-awesome-alt', 'square-font-awesome-stroke'), ('font-awesome-flag', 'font-awesome'), ('font-awesome-logo-full', 'font-awesome'), ('football-ball', 'football'), ('fragile', 'wine-glass-crack'), ('frosty-head', 'snowman-head'), ('frown', 'face-frown'), ('frown-open', 'face-frown-open'), ('funnel-dollar', 'filter-circle-dollar'), ('game-board-alt', 'game-board-simple'), ('gamepad-alt', 'gamepad-modern'), ('glass-champagne', 'champagne-glass'), ('glass-cheers', 'champagne-glasses'), ('glass-martini', 'martini-glass-empty'), ('glass-martini-alt', 'martini-glass'), ('glass-whiskey', 'whiskey-glass'), ('glass-whiskey-rocks', 'whiskey-glass-ice'), ('glasses-alt', 'glasses-round'), ('globe-africa', 'earth-africa'), ('globe-americas', 'earth-americas'), ('globe-asia', 'earth-asia'), ('globe-europe', 'earth-europe'), ('golf-ball', 'golf-ball-tee'), ('grimace', 'face-grimace'), ('grin', 'face-grin'), ('grin-alt', 'face-grin-wide'), ('grin-beam', 'face-grin-beam'), ('grin-beam-sweat', 'face-grin-beam-sweat'), ('grin-hearts', 'face-grin-hearts'), ('grin-squint', 'face-grin-squint'), ('grin-squint-tears', 'face-grin-squint-tears'), ('grin-stars', 'face-grin-stars'), ('grin-tears', 'face-grin-tears'), ('grin-tongue', 'face-grin-tongue'), ('grin-tongue-squint', 'face-grin-tongue-squint'), ('grin-tongue-wink', 'face-grin-tongue-wink'), ('grin-wink', 'face-grin-wink'), ('grip-horizontal', 'grip'), ('h-square', 'square-h'), ('hamburger', 'burger'), ('hand-holding-usd', 'hand-holding-dollar'), ('hand-holding-water', 'hand-holding-droplet'), ('hand-paper', 'hand'), ('hand-receiving', 'hands-holding-diamond'), ('hand-rock', 'hand-back-fist'), ('hands-heart', 'hands-holding-heart'), ('hands-helping', 'handshake-angle'), ('hands-usd', 'hands-holding-dollar'), ('hands-wash', 'hands-bubbles'), ('handshake-alt', 'handshake-simple'), ('handshake-alt-slash', 'handshake-simple-slash'), ('hard-hat', 'helmet-safety'), ('hdd', 'hard-drive'), ('head-vr', 'head-side-goggles'), ('headphones-alt', 'headphones-simple'), ('heart-broken', 'heart-crack'), ('heart-circle', 'circle-heart'), ('heart-rate', 'wave-pulse'), ('heart-square', 'square-heart'), ('heartbeat', 'heart-pulse'), ('hiking', 'person-hiking'), ('history', 'clock-rotate-left'), ('home', 'house'), ('home-alt', 'house'), ('home-heart', 'house-heart'), ('home-lg', 'house-chimney'), ('home-lg-alt', 'house'), ('hospital-alt', 'hospital'), ('hospital-symbol', 'circle-h'), ('hot-tub', 'hot-tub-person'), ('hourglass-half', 'hourglass'), ('house-damage', 'house-chimney-crack'), ('house-leave', 'house-person-leave'), ('house-return', 'house-person-return'), ('hryvnia', 'hryvnia-sign'), ('humidity', 'droplet-percent'), ('icons-alt', 'symbols'), ('id-card-alt', 'id-card-clip'), ('industry-alt', 'industry-windows'), ('info-circle', 'circle-info'), ('info-square', 'square-info'), ('innosoft', '42-group'), ('inventory', 'shelves'), ('journal-whills', 'book-journal-whills'), ('kiss', 'face-kiss'), ('kiss-beam', 'face-kiss-beam'), ('kiss-wink-heart', 'face-kiss-wink-heart'), ('landmark-alt', 'landmark-dome'), ('laptop-house', 'house-laptop'), ('laugh', 'face-laugh'), ('laugh-beam', 'face-laugh-beam'), ('laugh-squint', 'face-laugh-squint'), ('laugh-wink', 'face-laugh-wink'), ('level-down', 'arrow-turn-down'), ('level-down-alt', 'turn-down'), ('level-up', 'arrow-turn-up'), ('level-up-alt', 'turn-up'), ('list-alt', 'rectangle-list'), ('location', 'location-crosshairs'), ('location-circle', 'circle-location-arrow'), ('location-slash', 'location-crosshairs-slash'), ('lock-alt', 'lock-keyhole'), ('lock-open-alt', 'lock-keyhole-open'), ('long-arrow-alt-down', 'down-long'), ('long-arrow-alt-left', 'left-long'), ('long-arrow-alt-right', 'right-long'), ('long-arrow-alt-up', 'up-long'), ('long-arrow-down', 'arrow-down-long'), ('long-arrow-left', 'arrow-left-long'), ('long-arrow-right', 'arrow-right-long'), ('long-arrow-up', 'arrow-up-long'), ('low-vision', 'eye-low-vision'), ('luchador', 'luchador-mask'), ('luggage-cart', 'cart-flatbed-suitcase'), ('magic', 'wand-magic'), ('mail-bulk', 'envelopes-bulk'), ('male', 'person'), ('map-marked', 'map-location'), ('map-marked-alt', 'map-location-dot'), ('map-marker', 'location-pin'), ('map-marker-alt', 'location-dot'), ('map-marker-alt-slash', 'location-dot-slash'), ('map-marker-check', 'location-check'), ('map-marker-edit', 'location-pen'), ('map-marker-exclamation', 'location-exclamation'), ('map-marker-minus', 'location-minus'), ('map-marker-plus', 'location-plus'), ('map-marker-question', 'location-question'), ('map-marker-slash', 'location-pin-slash'), ('map-marker-smile', 'location-smile'), ('map-marker-times', 'location-xmark'), ('map-signs', 'signs-post'), ('mars-stroke-h', 'mars-stroke-right'), ('mars-stroke-v', 'mars-stroke-up'), ('medium-m', 'medium'), ('medkit', 'suitcase-medical'), ('meh', 'face-meh'), ('meh-blank', 'face-meh-blank'), ('meh-rolling-eyes', 'face-rolling-eyes'), ('microphone-alt', 'microphone-lines'), ('microphone-alt-slash', 'microphone-lines-slash'), ('mind-share', 'brain-arrow-curved-right'), ('minus-circle', 'circle-minus'), ('minus-hexagon', 'hexagon-minus'), ('minus-octagon', 'octagon-minus'), ('minus-square', 'square-minus'), ('mobile-alt', 'mobile-screen-button'), ('mobile-android', 'mobile'), ('mobile-android-alt', 'mobile-screen'), ('money-bill-alt', 'money-bill-1'), ('money-bill-wave-alt', 'money-bill-1-wave'), ('money-check-alt', 'money-check-dollar'), ('money-check-edit', 'money-check-pen'), ('money-check-edit-alt', 'money-check-dollar-pen'), ('monitor-heart-rate', 'monitor-waveform'), ('mouse', 'computer-mouse'), ('mouse-alt', 'computer-mouse-scrollwheel'), ('mouse-pointer', 'arrow-pointer'), ('music-alt', 'music-note'), ('music-alt-slash', 'music-note-slash'), ('oil-temp', 'oil-temperature'), ('page-break', 'file-dashed-line'), ('paint-brush', 'paintbrush'), ('paint-brush-alt', 'paintbrush-fine'), ('paint-brush-fine', 'paintbrush-fine'), ('pallet-alt', 'pallet-boxes'), ('paragraph-rtl', 'paragraph-left'), ('parking', 'square-parking'), ('parking-circle', 'circle-parking'), ('parking-circle-slash', 'ban-parking'), ('parking-slash', 'square-parking-slash'), ('pastafarianism', 'spaghetti-monster-flying'), ('pause-circle', 'circle-pause'), ('paw-alt', 'paw-simple'), ('pen-alt', 'pen-clip'), ('pen-square', 'square-pen'), ('pencil-alt', 'pencil'), ('pencil-paintbrush', 'pen-paintbrush'), ('pencil-ruler', 'pen-ruler'), ('pennant', 'flag-pennant'), ('people-arrows', 'people-arrows-left-right'), ('people-carry', 'people-carry-box'), ('percentage', 'percent'), ('person-carry', 'person-carry-box'), ('phone-alt', 'phone-flip'), ('phone-laptop', 'laptop-mobile'), ('phone-square', 'square-phone'), ('phone-square-alt', 'square-phone-flip'), ('photo-video', 'photo-film'), ('plane-alt', 'plane-engines'), ('play-circle', 'circle-play'), ('plus-circle', 'circle-plus'), ('plus-hexagon', 'hexagon-plus'), ('plus-octagon', 'octagon-plus'), ('plus-square', 'square-plus'), ('poll', 'square-poll-vertical'), ('poll-h', 'square-poll-horizontal'), ('portal-enter', 'person-to-portal'), ('portal-exit', 'person-from-portal'), ('portrait', 'image-portrait'), ('pound-sign', 'sterling-sign'), ('pray', 'person-praying'), ('praying-hands', 'hands-praying'), ('prescription-bottle-alt', 'prescription-bottle-medical'), ('presentation', 'presentation-screen'), ('print-search', 'print-magnifying-glass'), ('procedures', 'bed-pulse'), ('project-diagram', 'diagram-project'), ('question-circle', 'circle-question'), ('question-square', 'square-question'), ('quran', 'book-quran'), ('rabbit-fast', 'rabbit-running'), ('radiation-alt', 'circle-radiation'), ('radio-alt', 'radio-tuner'), ('random', 'shuffle'), ('rectangle-landscape', 'rectangle'), ('rectangle-portrait', 'rectangle-vertical'), ('redo', 'arrow-rotate-right'), ('redo-alt', 'rotate-right'), ('remove-format', 'text-slash'), ('repeat-1-alt', 'arrows-repeat-1'), ('repeat-alt', 'arrows-repeat'), ('retweet-alt', 'arrows-retweet'), ('rss-square', 'square-rss'), ('running', 'person-running'), ('sad-cry', 'face-sad-cry'), ('sad-tear', 'face-sad-tear'), ('save', 'floppy-disk'), ('sax-hot', 'saxophone-fire'), ('scalpel-path', 'scalpel-line-dashed'), ('scanner-image', 'scanner'), ('search', 'magnifying-glass'), ('search-dollar', 'magnifying-glass-dollar'), ('search-location', 'magnifying-glass-location'), ('search-minus', 'magnifying-glass-minus'), ('search-plus', 'magnifying-glass-plus'), ('sensor-alert', 'sensor-triangle-exclamation'), ('sensor-smoke', 'sensor-cloud'), ('share-alt', 'share-nodes'), ('share-alt-square', 'square-share-nodes'), ('share-square', 'share-from-square'), ('shield-alt', 'shield-halved'), ('shipping-fast', 'truck-fast'), ('shipping-timed', 'truck-clock'), ('shopping-bag', 'bag-shopping'), ('shopping-basket', 'basket-shopping'), ('shopping-cart', 'cart-shopping'), ('shuttle-van', 'van-shuttle'), ('sign', 'sign-hanging'), ('sign-in', 'arrow-right-to-bracket'), ('sign-in-alt', 'right-to-bracket'), ('sign-language', 'hands'), ('sign-out', 'arrow-right-from-bracket'), ('sign-out-alt', 'right-from-bracket'), ('signal-1', 'signal-weak'), ('signal-2', 'signal-fair'), ('signal-3', 'signal-good'), ('signal-4', 'signal-strong'), ('signal-alt', 'signal-bars'), ('signal-alt-1', 'signal-bars-weak'), ('signal-alt-2', 'signal-bars-fair'), ('signal-alt-3', 'signal-bars-good'), ('signal-alt-slash', 'signal-bars-slash'), ('skating', 'person-skating'), ('ski-jump', 'person-ski-jumping'), ('ski-lift', 'person-ski-lift'), ('skiing', 'person-skiing'), ('skiing-nordic', 'person-skiing-nordic'), ('slack-hash', 'slack'), ('sledding', 'person-sledding'), ('sliders-h', 'sliders'), ('sliders-h-square', 'square-sliders'), ('sliders-v', 'sliders-up'), ('sliders-v-square', 'square-sliders-vertical'), ('smile', 'face-smile'), ('smile-beam', 'face-smile-beam'), ('smile-plus', 'face-smile-plus'), ('smile-wink', 'face-smile-wink'), ('smoking-ban', 'ban-smoking'), ('sms', 'comment-sms'), ('snapchat-ghost', 'snapchat'), ('snowboarding', 'person-snowboarding'), ('snowmobile', 'person-snowmobiling'), ('sort-alpha-down', 'arrow-down-a-z'), ('sort-alpha-down-alt', 'arrow-down-z-a'), ('sort-alpha-up', 'arrow-up-a-z'), ('sort-alpha-up-alt', 'arrow-up-z-a'), ('sort-alt', 'arrow-down-arrow-up'), ('sort-amount-down', 'arrow-down-wide-short'), ('sort-amount-down-alt', 'arrow-down-short-wide'), ('sort-amount-up', 'arrow-up-wide-short'), ('sort-amount-up-alt', 'arrow-up-short-wide'), ('sort-circle', 'circle-sort'), ('sort-circle-down', 'circle-sort-down'), ('sort-circle-up', 'circle-sort-up'), ('sort-numeric-down', 'arrow-down-1-9'), ('sort-numeric-down-alt', 'arrow-down-9-1'), ('sort-numeric-up', 'arrow-up-1-9'), ('sort-numeric-up-alt', 'arrow-up-9-1'), ('sort-shapes-down', 'arrow-down-triangle-square'), ('sort-shapes-down-alt', 'arrow-down-square-triangle'), ('sort-shapes-up', 'arrow-up-triangle-square'), ('sort-shapes-up-alt', 'arrow-up-square-triangle'), ('sort-size-down', 'arrow-down-big-small'), ('sort-size-down-alt', 'arrow-down-small-big'), ('sort-size-up', 'arrow-up-big-small'), ('sort-size-up-alt', 'arrow-up-small-big'), ('soup', 'bowl-hot'), ('space-shuttle', 'shuttle-space'), ('space-station-moon-alt', 'space-station-moon-construction'), ('square-root-alt', 'square-root-variable'), ('star-half-alt', 'star-half-stroke'), ('starfighter-alt', 'starfighter-twin-ion-engine'), ('step-backward', 'backward-step'), ('step-forward', 'forward-step'), ('sticky-note', 'note-sticky'), ('stop-circle', 'circle-stop'), ('store-alt', 'shop'), ('store-alt-slash', 'shop-slash'), ('stream', 'bars-staggered'), ('subway', 'train-subway'), ('surprise', 'face-surprise'), ('swimmer', 'person-swimming'), ('swimming-pool', 'water-ladder'), ('sync', 'arrows-rotate'), ('sync-alt', 'rotate'), ('table-tennis', 'table-tennis-paddle-ball'), ('tablet-alt', 'tablet-screen-button'), ('tablet-android', 'tablet'), ('tablet-android-alt', 'tablet-screen'), ('tachometer', 'gauge-simple'), ('tachometer-alt', 'gauge'), ('tachometer-alt-average', 'gauge-med'), ('tachometer-alt-fast', 'gauge'), ('tachometer-alt-fastest', 'gauge-max'), ('tachometer-alt-slow', 'gauge-low'), ('tachometer-alt-slowest', 'gauge-min'), ('tachometer-average', 'gauge-simple-med'), ('tachometer-fast', 'gauge-simple'), ('tachometer-fastest', 'gauge-simple-max'), ('tachometer-slow', 'gauge-simple-low'), ('tachometer-slowest', 'gauge-simple-min'), ('tanakh', 'book-tanakh'), ('tasks', 'list-check'), ('tasks-alt', 'bars-progress'), ('telegram-plane', 'telegram'), ('temperature-down', 'temperature-arrow-down'), ('temperature-frigid', 'temperature-snow'), ('temperature-hot', 'temperature-sun'), ('temperature-up', 'temperature-arrow-up'), ('tenge', 'tenge-sign'), ('th', 'table-cells'), ('th-large', 'table-cells-large'), ('th-list', 'table-list'), ('theater-masks', 'masks-theater'), ('thermometer-empty', 'temperature-empty'), ('thermometer-full', 'temperature-full'), ('thermometer-half', 'temperature-half'), ('thermometer-quarter', 'temperature-quarter'), ('thermometer-three-quarters', 'temperature-three-quarters'), ('thumb-tack', 'thumbtack'), ('thunderstorm', 'cloud-bolt'), ('thunderstorm-moon', 'cloud-bolt-moon'), ('thunderstorm-sun', 'cloud-bolt-sun'), ('ticket-alt', 'ticket-simple'), ('times', 'xmark'), ('times-circle', 'circle-xmark'), ('times-hexagon', 'hexagon-xmark'), ('times-octagon', 'octagon-xmark'), ('times-square', 'square-xmark'), ('tint', 'droplet'), ('tint-slash', 'droplet-slash'), ('tired', 'face-tired'), ('toilet-paper-alt', 'toilet-paper-blank'), ('tombstone-alt', 'tombstone-blank'), ('tools', 'screwdriver-wrench'), ('torah', 'scroll-torah'), ('tram', 'train-tram'), ('transgender-alt', 'transgender'), ('trash-alt', 'trash-can'), ('trash-restore', 'trash-arrow-up'), ('trash-restore-alt', 'trash-can-arrow-up'), ('trash-undo-alt', 'trash-can-undo'), ('tree-alt', 'tree-deciduous'), ('triangle-music', 'triangle-instrument'), ('trophy-alt', 'trophy-star'), ('truck-couch', 'truck-ramp-couch'), ('truck-loading', 'truck-ramp-box'), ('tshirt', 'shirt'), ('tv-alt', 'tv'), ('undo', 'arrow-rotate-left'), ('undo-alt', 'rotate-left'), ('university', 'building-columns'), ('unlink', 'link-slash'), ('unlock-alt', 'unlock-keyhole'), ('usd-circle', 'circle-dollar'), ('usd-square', 'square-dollar'), ('user-alt', 'user-large'), ('user-alt-slash', 'user-large-slash'), ('user-chart', 'chart-user'), ('user-circle', 'circle-user'), ('user-cog', 'user-gear'), ('user-edit', 'user-pen'), ('user-friends', 'user-group'), ('user-hard-hat', 'user-helmet-safety'), ('user-md', 'user-doctor'), ('user-md-chat', 'user-doctor-message'), ('user-times', 'user-xmark'), ('users-class', 'screen-users'), ('users-cog', 'users-gear'), ('users-crown', 'user-group-crown'), ('utensil-fork', 'fork'), ('utensil-knife', 'knife'), ('utensil-spoon', 'spoon'), ('utensils-alt', 'fork-knife'), ('vhs', 'cassette-vhs'), ('volleyball-ball', 'volleyball'), ('volume-down', 'volume-low'), ('volume-mute', 'volume-xmark'), ('volume-up', 'volume-high'), ('vote-nay', 'xmark-to-slot'), ('vote-yea', 'check-to-slot'), ('walking', 'person-walking'), ('warehouse-alt', 'warehouse-full'), ('washer', 'washing-machine'), ('water-lower', 'water-arrow-down'), ('water-rise', 'water-arrow-up'), ('waveform-path', 'waveform-lines'), ('webcam', 'camera-web'), ('webcam-slash', 'camera-web-slash'), ('weight', 'weight-scale'), ('wifi-1', 'wifi-weak'), ('wifi-2', 'wifi-fair'), ('window-alt', 'window-flip'), ('window-close', 'rectangle-xmark'), ('wine-glass-alt', 'wine-glass-empty')) AS mapping(from_icon, to_icon)\n)\nUPDATE sidebar_urls\nSET icon =\n CASE\n WHEN icon LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)\n ELSE remaps.to_icon\n END\nFROM remaps\nWHERE icon = remaps.from_icon\n OR icon = CONCAT('fa-', remaps.from_icon)\n OR icon = CONCAT('far-', remaps.from_icon)\n OR icon = CONCAT('fab-', remaps.from_icon)\n OR icon = CONCAT('far fa-', remaps.from_icon)\n OR icon = CONCAT('fab fa-', remaps.from_icon)\n OR icon = CONCAT('fas fa-', remaps.from_icon);\n")
-> 0.0075s
-- execute("UPDATE sidebar_urls\nSET icon =\nCASE\n WHEN icon LIKE 'fas fa-%' THEN SUBSTRING(icon FROM 8)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fa-%' THEN SUBSTRING(icon FROM 4)\n ELSE icon\nEND\nWHERE icon LIKE 'fa-%'\n OR icon LIKE 'far fa-%'\n OR icon LIKE 'fab fa-%'\n OR icon LIKE 'fas fa-%';\n")
-> 0.0003s
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon FROM (VALUES ('adjust', 'circle-half-stroke'), ('air-freshener', 'spray-can-sparkles'), ('alien-monster', 'alien-8bit'), ('allergies', 'hand-dots'), ('ambulance', 'truck-medical'), ('american-sign-language-interpreting', 'hands-asl-interpreting'), ('analytics', 'chart-mixed'), ('angle-double-down', 'angles-down'), ('angle-double-left', 'angles-left'), ('angle-double-right', 'angles-right'), ('angle-double-up', 'angles-up'), ('angry', 'face-angry'), ('apple-alt', 'apple-whole'), ('apple-crate', 'crate-apple'), ('archive', 'box-archive'), ('arrow-alt-circle-down', 'circle-down'), ('arrow-alt-circle-left', 'circle-left'), ('arrow-alt-circle-right', 'circle-right'), ('arrow-alt-circle-up', 'circle-up'), ('arrow-alt-down', 'down'), ('arrow-alt-from-bottom', 'up-from-line'), ('arrow-alt-from-left', 'right-from-line'), ('arrow-alt-from-right', 'left-from-line'), ('arrow-alt-from-top', 'down-from-line'), ('arrow-alt-left', 'left'), ('arrow-alt-right', 'right'), ('arrow-alt-square-down', 'square-down'), ('arrow-alt-square-left', 'square-left'), ('arrow-alt-square-right', 'square-right'), ('arrow-alt-square-up', 'square-up'), ('arrow-alt-to-bottom', 'down-to-line'), ('arrow-alt-to-left', 'left-to-line'), ('arrow-alt-to-right', 'right-to-line'), ('arrow-alt-to-top', 'up-to-line'), ('arrow-alt-up', 'up'), ('arrow-circle-down', 'circle-arrow-down'), ('arrow-circle-left', 'circle-arrow-left'), ('arrow-circle-right', 'circle-arrow-right'), ('arrow-circle-up', 'circle-arrow-up'), ('arrow-from-bottom', 'arrow-up-from-line'), ('arrow-from-left', 'arrow-right-from-line'), ('arrow-from-right', 'arrow-left-from-line'), ('arrow-from-top', 'arrow-down-from-line'), ('arrow-square-down', 'square-arrow-down'), ('arrow-square-left', 'square-arrow-left'), ('arrow-square-right', 'square-arrow-right'), ('arrow-square-up', 'square-arrow-up'), ('arrow-to-bottom', 'arrow-down-to-line'), ('arrow-to-left', 'arrow-left-to-line'), ('arrow-to-right', 'arrow-right-to-line'), ('arrow-to-top', 'arrow-up-to-line'), ('arrows', 'arrows-up-down-left-right'), ('arrows-alt', 'up-down-left-right'), ('arrows-alt-h', 'left-right'), ('arrows-alt-v', 'up-down'), ('arrows-h', 'arrows-left-right'), ('arrows-v', 'arrows-up-down'), ('assistive-listening-systems', 'ear-listen'), ('atlas', 'book-atlas'), ('atom-alt', 'atom-simple'), ('backspace', 'delete-left'), ('balance-scale', 'scale-balanced'), ('balance-scale-left', 'scale-unbalanced'), ('balance-scale-right', 'scale-unbalanced-flip'), ('band-aid', 'bandage'), ('barcode-alt', 'rectangle-barcode'), ('baseball-ball', 'baseball'), ('basketball-ball', 'basketball'), ('bed-alt', 'bed-front'), ('beer', 'beer-mug-empty'), ('betamax', 'cassette-betamax'), ('bible', 'book-bible'), ('biking', 'person-biking'), ('biking-mountain', 'person-biking-mountain'), ('birthday-cake', 'cake-candles'), ('blind', 'person-walking-with-cane'), ('book-alt', 'book-blank'), ('book-dead', 'book-skull'), ('book-reader', 'book-open-reader'), ('book-spells', 'book-sparkles'), ('border-style', 'border-top-left'), ('border-style-alt', 'border-bottom-right'), ('box-alt', 'box-taped'), ('box-fragile', 'square-fragile'), ('box-full', 'box-open-full'), ('box-up', 'square-this-way-up'), ('box-usd', 'box-dollar'), ('boxes', 'boxes-stacked'), ('boxes-alt', 'boxes-stacked'), ('brackets', 'brackets-square'), ('broadcast-tower', 'tower-broadcast'), ('burn', 'fire-flame-simple'), ('bus-alt', 'bus-simple'), ('calculator-alt', 'calculator-simple'), ('calendar-alt', 'calendar-days'), ('calendar-edit', 'calendar-pen'), ('calendar-times', 'calendar-xmark'), ('camera-alt', 'camera'), ('camera-home', 'camera-security'), ('car-alt', 'car-rear'), ('car-crash', 'car-burst'), ('car-mechanic', 'car-wrench'), ('caravan-alt', 'caravan-simple'), ('caret-circle-down', 'circle-caret-down'), ('caret-circle-left', 'circle-caret-left'), ('caret-circle-right', 'circle-caret-right'), ('caret-circle-up', 'circle-caret-up'), ('caret-square-down', 'square-caret-down'), ('caret-square-left', 'square-caret-left'), ('caret-square-right', 'square-caret-right'), ('caret-square-up', 'square-caret-up'), ('cctv', 'camera-cctv'), ('chalkboard-teacher', 'chalkboard-user'), ('chart-pie-alt', 'chart-pie-simple'), ('check-circle', 'circle-check'), ('check-square', 'square-check'), ('cheeseburger', 'burger-cheese'), ('chess-bishop-alt', 'chess-bishop-piece'), ('chess-clock-alt', 'chess-clock-flip'), ('chess-king-alt', 'chess-king-piece'), ('chess-knight-alt', 'chess-knight-piece'), ('chess-pawn-alt', 'chess-pawn-piece'), ('chess-queen-alt', 'chess-queen-piece'), ('chess-rook-alt', 'chess-rook-piece'), ('chevron-circle-down', 'circle-chevron-down'), ('chevron-circle-left', 'circle-chevron-left'), ('chevron-circle-right', 'circle-chevron-right'), ('chevron-circle-up', 'circle-chevron-up'), ('chevron-double-down', 'chevrons-down'), ('chevron-double-left', 'chevrons-left'), ('chevron-double-right', 'chevrons-right'), ('chevron-double-up', 'chevrons-up'), ('chevron-square-down', 'square-chevron-down'), ('chevron-square-left', 'square-chevron-left'), ('chevron-square-right', 'square-chevron-right'), ('chevron-square-up', 'square-chevron-up'), ('clinic-medical', 'house-chimney-medical'), ('cloud-download', 'cloud-arrow-down'), ('cloud-download-alt', 'cloud-arrow-down'), ('cloud-upload', 'cloud-arrow-up'), ('cloud-upload-alt', 'cloud-arrow-up'), ('cocktail', 'martini-glass-citrus'), ('coffee', 'mug-saucer'), ('coffee-togo', 'cup-togo'), ('cog', 'gear'), ('cogs', 'gears'), ('columns', 'table-columns'), ('comment-alt', 'message'), ('comment-alt-check', 'message-check'), ('comment-alt-dollar', 'message-dollar'), ('comment-alt-dots', 'message-dots'), ('comment-alt-edit', 'message-pen'), ('comment-alt-exclamation', 'message-exclamation'), ('comment-alt-lines', 'message-lines'), ('comment-alt-medical', 'message-medical'), ('comment-alt-minus', 'message-minus'), ('comment-alt-music', 'message-music'), ('comment-alt-plus', 'message-plus'), ('comment-alt-slash', 'message-slash'), ('comment-alt-smile', 'message-smile'), ('comment-alt-times', 'message-xmark'), ('comment-edit', 'comment-pen'), ('comment-times', 'comment-xmark'), ('comments-alt', 'messages'), ('comments-alt-dollar', 'messages-dollar'), ('compress-alt', 'down-left-and-up-right-to-center'), ('compress-arrows-alt', 'minimize'), ('concierge-bell', 'bell-concierge'), ('construction', 'triangle-person-digging'), ('conveyor-belt-alt', 'conveyor-belt-boxes'), ('cowbell-more', 'cowbell-circle-plus'), ('cricket', 'cricket-bat-ball'), ('crop-alt', 'crop-simple'), ('curling', 'curling-stone'), ('cut', 'scissors'), ('deaf', 'ear-deaf'), ('debug', 'ban-bug'), ('desktop-alt', 'desktop'), ('dewpoint', 'droplet-degree'), ('diagnoses', 'person-dots-from-line'), ('digging', 'person-digging'), ('digital-tachograph', 'tachograph-digital'), ('directions', 'diamond-turn-right'), ('dizzy', 'face-dizzy'), ('dolly-flatbed', 'cart-flatbed'), ('dolly-flatbed-alt', 'cart-flatbed-boxes'), ('dolly-flatbed-empty', 'cart-flatbed-empty'), ('donate', 'circle-dollar-to-slot'), ('dot-circle', 'circle-dot'), ('drafting-compass', 'compass-drafting'), ('drone-alt', 'drone-front'), ('dryer-alt', 'dryer-heat'), ('eclipse-alt', 'moon-over-sun'), ('edit', 'pen-to-square'), ('ellipsis-h', 'ellipsis'), ('ellipsis-h-alt', 'ellipsis-stroke'), ('ellipsis-v', 'ellipsis-vertical'), ('ellipsis-v-alt', 'ellipsis-stroke-vertical'), ('envelope-square', 'square-envelope'), ('exchange', 'arrow-right-arrow-left'), ('exchange-alt', 'right-left'), ('exclamation-circle', 'circle-exclamation'), ('exclamation-square', 'square-exclamation'), ('exclamation-triangle', 'triangle-exclamation'), ('expand-alt', 'up-right-and-down-left-from-center'), ('expand-arrows', 'arrows-maximize'), ('expand-arrows-alt', 'maximize'), ('external-link', 'arrow-up-right-from-square'), ('external-link-alt', 'up-right-from-square'), ('external-link-square', 'square-arrow-up-right'), ('external-link-square-alt', 'square-up-right'), ('eyedropper', 'eye-dropper'), ('fast-backward', 'backward-fast'), ('fast-forward', 'forward-fast'), ('feather-alt', 'feather-pointed'), ('female', 'person-dress'), ('field-hockey', 'field-hockey-stick-ball'), ('fighter-jet', 'jet-fighter'), ('file-alt', 'file-lines'), ('file-archive', 'file-zipper'), ('file-chart-line', 'file-chart-column'), ('file-download', 'file-arrow-down'), ('file-edit', 'file-pen'), ('file-medical-alt', 'file-waveform'), ('file-search', 'file-magnifying-glass'), ('file-times', 'file-xmark'), ('file-upload', 'file-arrow-up'), ('film-alt', 'film-simple'), ('fire-alt', 'fire-flame-curved'), ('first-aid', 'kit-medical'), ('fist-raised', 'hand-fist'), ('flag-alt', 'flag-swallowtail'), ('flame', 'fire-flame'), ('flask-poison', 'flask-round-poison'), ('flask-potion', 'flask-round-potion'), ('flushed', 'face-flushed'), ('fog', 'cloud-fog'), ('folder-download', 'folder-arrow-down'), ('folder-times', 'folder-xmark'), ('folder-upload', 'folder-arrow-up'), ('font-awesome-alt', 'square-font-awesome-stroke'), ('font-awesome-flag', 'font-awesome'), ('font-awesome-logo-full', 'font-awesome'), ('football-ball', 'football'), ('fragile', 'wine-glass-crack'), ('frosty-head', 'snowman-head'), ('frown', 'face-frown'), ('frown-open', 'face-frown-open'), ('funnel-dollar', 'filter-circle-dollar'), ('game-board-alt', 'game-board-simple'), ('gamepad-alt', 'gamepad-modern'), ('glass-champagne', 'champagne-glass'), ('glass-cheers', 'champagne-glasses'), ('glass-martini', 'martini-glass-empty'), ('glass-martini-alt', 'martini-glass'), ('glass-whiskey', 'whiskey-glass'), ('glass-whiskey-rocks', 'whiskey-glass-ice'), ('glasses-alt', 'glasses-round'), ('globe-africa', 'earth-africa'), ('globe-americas', 'earth-americas'), ('globe-asia', 'earth-asia'), ('globe-europe', 'earth-europe'), ('golf-ball', 'golf-ball-tee'), ('grimace', 'face-grimace'), ('grin', 'face-grin'), ('grin-alt', 'face-grin-wide'), ('grin-beam', 'face-grin-beam'), ('grin-beam-sweat', 'face-grin-beam-sweat'), ('grin-hearts', 'face-grin-hearts'), ('grin-squint', 'face-grin-squint'), ('grin-squint-tears', 'face-grin-squint-tears'), ('grin-stars', 'face-grin-stars'), ('grin-tears', 'face-grin-tears'), ('grin-tongue', 'face-grin-tongue'), ('grin-tongue-squint', 'face-grin-tongue-squint'), ('grin-tongue-wink', 'face-grin-tongue-wink'), ('grin-wink', 'face-grin-wink'), ('grip-horizontal', 'grip'), ('h-square', 'square-h'), ('hamburger', 'burger'), ('hand-holding-usd', 'hand-holding-dollar'), ('hand-holding-water', 'hand-holding-droplet'), ('hand-paper', 'hand'), ('hand-receiving', 'hands-holding-diamond'), ('hand-rock', 'hand-back-fist'), ('hands-heart', 'hands-holding-heart'), ('hands-helping', 'handshake-angle'), ('hands-usd', 'hands-holding-dollar'), ('hands-wash', 'hands-bubbles'), ('handshake-alt', 'handshake-simple'), ('handshake-alt-slash', 'handshake-simple-slash'), ('hard-hat', 'helmet-safety'), ('hdd', 'hard-drive'), ('head-vr', 'head-side-goggles'), ('headphones-alt', 'headphones-simple'), ('heart-broken', 'heart-crack'), ('heart-circle', 'circle-heart'), ('heart-rate', 'wave-pulse'), ('heart-square', 'square-heart'), ('heartbeat', 'heart-pulse'), ('hiking', 'person-hiking'), ('history', 'clock-rotate-left'), ('home', 'house'), ('home-alt', 'house'), ('home-heart', 'house-heart'), ('home-lg', 'house-chimney'), ('home-lg-alt', 'house'), ('hospital-alt', 'hospital'), ('hospital-symbol', 'circle-h'), ('hot-tub', 'hot-tub-person'), ('hourglass-half', 'hourglass'), ('house-damage', 'house-chimney-crack'), ('house-leave', 'house-person-leave'), ('house-return', 'house-person-return'), ('hryvnia', 'hryvnia-sign'), ('humidity', 'droplet-percent'), ('icons-alt', 'symbols'), ('id-card-alt', 'id-card-clip'), ('industry-alt', 'industry-windows'), ('info-circle', 'circle-info'), ('info-square', 'square-info'), ('innosoft', '42-group'), ('inventory', 'shelves'), ('journal-whills', 'book-journal-whills'), ('kiss', 'face-kiss'), ('kiss-beam', 'face-kiss-beam'), ('kiss-wink-heart', 'face-kiss-wink-heart'), ('landmark-alt', 'landmark-dome'), ('laptop-house', 'house-laptop'), ('laugh', 'face-laugh'), ('laugh-beam', 'face-laugh-beam'), ('laugh-squint', 'face-laugh-squint'), ('laugh-wink', 'face-laugh-wink'), ('level-down', 'arrow-turn-down'), ('level-down-alt', 'turn-down'), ('level-up', 'arrow-turn-up'), ('level-up-alt', 'turn-up'), ('list-alt', 'rectangle-list'), ('location', 'location-crosshairs'), ('location-circle', 'circle-location-arrow'), ('location-slash', 'location-crosshairs-slash'), ('lock-alt', 'lock-keyhole'), ('lock-open-alt', 'lock-keyhole-open'), ('long-arrow-alt-down', 'down-long'), ('long-arrow-alt-left', 'left-long'), ('long-arrow-alt-right', 'right-long'), ('long-arrow-alt-up', 'up-long'), ('long-arrow-down', 'arrow-down-long'), ('long-arrow-left', 'arrow-left-long'), ('long-arrow-right', 'arrow-right-long'), ('long-arrow-up', 'arrow-up-long'), ('low-vision', 'eye-low-vision'), ('luchador', 'luchador-mask'), ('luggage-cart', 'cart-flatbed-suitcase'), ('magic', 'wand-magic'), ('mail-bulk', 'envelopes-bulk'), ('male', 'person'), ('map-marked', 'map-location'), ('map-marked-alt', 'map-location-dot'), ('map-marker', 'location-pin'), ('map-marker-alt', 'location-dot'), ('map-marker-alt-slash', 'location-dot-slash'), ('map-marker-check', 'location-check'), ('map-marker-edit', 'location-pen'), ('map-marker-exclamation', 'location-exclamation'), ('map-marker-minus', 'location-minus'), ('map-marker-plus', 'location-plus'), ('map-marker-question', 'location-question'), ('map-marker-slash', 'location-pin-slash'), ('map-marker-smile', 'location-smile'), ('map-marker-times', 'location-xmark'), ('map-signs', 'signs-post'), ('mars-stroke-h', 'mars-stroke-right'), ('mars-stroke-v', 'mars-stroke-up'), ('medium-m', 'medium'), ('medkit', 'suitcase-medical'), ('meh', 'face-meh'), ('meh-blank', 'face-meh-blank'), ('meh-rolling-eyes', 'face-rolling-eyes'), ('microphone-alt', 'microphone-lines'), ('microphone-alt-slash', 'microphone-lines-slash'), ('mind-share', 'brain-arrow-curved-right'), ('minus-circle', 'circle-minus'), ('minus-hexagon', 'hexagon-minus'), ('minus-octagon', 'octagon-minus'), ('minus-square', 'square-minus'), ('mobile-alt', 'mobile-screen-button'), ('mobile-android', 'mobile'), ('mobile-android-alt', 'mobile-screen'), ('money-bill-alt', 'money-bill-1'), ('money-bill-wave-alt', 'money-bill-1-wave'), ('money-check-alt', 'money-check-dollar'), ('money-check-edit', 'money-check-pen'), ('money-check-edit-alt', 'money-check-dollar-pen'), ('monitor-heart-rate', 'monitor-waveform'), ('mouse', 'computer-mouse'), ('mouse-alt', 'computer-mouse-scrollwheel'), ('mouse-pointer', 'arrow-pointer'), ('music-alt', 'music-note'), ('music-alt-slash', 'music-note-slash'), ('oil-temp', 'oil-temperature'), ('page-break', 'file-dashed-line'), ('paint-brush', 'paintbrush'), ('paint-brush-alt', 'paintbrush-fine'), ('paint-brush-fine', 'paintbrush-fine'), ('pallet-alt', 'pallet-boxes'), ('paragraph-rtl', 'paragraph-left'), ('parking', 'square-parking'), ('parking-circle', 'circle-parking'), ('parking-circle-slash', 'ban-parking'), ('parking-slash', 'square-parking-slash'), ('pastafarianism', 'spaghetti-monster-flying'), ('pause-circle', 'circle-pause'), ('paw-alt', 'paw-simple'), ('pen-alt', 'pen-clip'), ('pen-square', 'square-pen'), ('pencil-alt', 'pencil'), ('pencil-paintbrush', 'pen-paintbrush'), ('pencil-ruler', 'pen-ruler'), ('pennant', 'flag-pennant'), ('people-arrows', 'people-arrows-left-right'), ('people-carry', 'people-carry-box'), ('percentage', 'percent'), ('person-carry', 'person-carry-box'), ('phone-alt', 'phone-flip'), ('phone-laptop', 'laptop-mobile'), ('phone-square', 'square-phone'), ('phone-square-alt', 'square-phone-flip'), ('photo-video', 'photo-film'), ('plane-alt', 'plane-engines'), ('play-circle', 'circle-play'), ('plus-circle', 'circle-plus'), ('plus-hexagon', 'hexagon-plus'), ('plus-octagon', 'octagon-plus'), ('plus-square', 'square-plus'), ('poll', 'square-poll-vertical'), ('poll-h', 'square-poll-horizontal'), ('portal-enter', 'person-to-portal'), ('portal-exit', 'person-from-portal'), ('portrait', 'image-portrait'), ('pound-sign', 'sterling-sign'), ('pray', 'person-praying'), ('praying-hands', 'hands-praying'), ('prescription-bottle-alt', 'prescription-bottle-medical'), ('presentation', 'presentation-screen'), ('print-search', 'print-magnifying-glass'), ('procedures', 'bed-pulse'), ('project-diagram', 'diagram-project'), ('question-circle', 'circle-question'), ('question-square', 'square-question'), ('quran', 'book-quran'), ('rabbit-fast', 'rabbit-running'), ('radiation-alt', 'circle-radiation'), ('radio-alt', 'radio-tuner'), ('random', 'shuffle'), ('rectangle-landscape', 'rectangle'), ('rectangle-portrait', 'rectangle-vertical'), ('redo', 'arrow-rotate-right'), ('redo-alt', 'rotate-right'), ('remove-format', 'text-slash'), ('repeat-1-alt', 'arrows-repeat-1'), ('repeat-alt', 'arrows-repeat'), ('retweet-alt', 'arrows-retweet'), ('rss-square', 'square-rss'), ('running', 'person-running'), ('sad-cry', 'face-sad-cry'), ('sad-tear', 'face-sad-tear'), ('save', 'floppy-disk'), ('sax-hot', 'saxophone-fire'), ('scalpel-path', 'scalpel-line-dashed'), ('scanner-image', 'scanner'), ('search', 'magnifying-glass'), ('search-dollar', 'magnifying-glass-dollar'), ('search-location', 'magnifying-glass-location'), ('search-minus', 'magnifying-glass-minus'), ('search-plus', 'magnifying-glass-plus'), ('sensor-alert', 'sensor-triangle-exclamation'), ('sensor-smoke', 'sensor-cloud'), ('share-alt', 'share-nodes'), ('share-alt-square', 'square-share-nodes'), ('share-square', 'share-from-square'), ('shield-alt', 'shield-halved'), ('shipping-fast', 'truck-fast'), ('shipping-timed', 'truck-clock'), ('shopping-bag', 'bag-shopping'), ('shopping-basket', 'basket-shopping'), ('shopping-cart', 'cart-shopping'), ('shuttle-van', 'van-shuttle'), ('sign', 'sign-hanging'), ('sign-in', 'arrow-right-to-bracket'), ('sign-in-alt', 'right-to-bracket'), ('sign-language', 'hands'), ('sign-out', 'arrow-right-from-bracket'), ('sign-out-alt', 'right-from-bracket'), ('signal-1', 'signal-weak'), ('signal-2', 'signal-fair'), ('signal-3', 'signal-good'), ('signal-4', 'signal-strong'), ('signal-alt', 'signal-bars'), ('signal-alt-1', 'signal-bars-weak'), ('signal-alt-2', 'signal-bars-fair'), ('signal-alt-3', 'signal-bars-good'), ('signal-alt-slash', 'signal-bars-slash'), ('skating', 'person-skating'), ('ski-jump', 'person-ski-jumping'), ('ski-lift', 'person-ski-lift'), ('skiing', 'person-skiing'), ('skiing-nordic', 'person-skiing-nordic'), ('slack-hash', 'slack'), ('sledding', 'person-sledding'), ('sliders-h', 'sliders'), ('sliders-h-square', 'square-sliders'), ('sliders-v', 'sliders-up'), ('sliders-v-square', 'square-sliders-vertical'), ('smile', 'face-smile'), ('smile-beam', 'face-smile-beam'), ('smile-plus', 'face-smile-plus'), ('smile-wink', 'face-smile-wink'), ('smoking-ban', 'ban-smoking'), ('sms', 'comment-sms'), ('snapchat-ghost', 'snapchat'), ('snowboarding', 'person-snowboarding'),
snowboarding'), ('snowmobile', 'person-snowmobiling'), ('sort-alpha-down', 'arrow-down-a-z'), ('sort-alpha-down-alt', 'arrow-down-z-a'), ('sort-alpha-up', 'arrow-up-a-z'), ('sort-alpha-up-alt', 'arrow-up-z-a'), ('sort-alt', 'arrow-down-arrow-up'), ('sort-amount-down', 'arrow-down-wide-short'), ('sort-amount-down-alt', 'arrow-down-short-wide'), ('sort-amount-up', 'arrow-up-wide-short'), ('sort-amount-up-alt', 'arrow-up-short-wide'), ('sort-circle', 'circle-sort'), ('sort-circle-down', 'circle-sort-down'), ('sort-circle-up', 'circle-sort-up'), ('sort-numeric-down', 'arrow-down-1-9'), ('sort-numeric-down-alt', 'arrow-down-9-1'), ('sort-numeric-up', 'arrow-up-1-9'), ('sort-numeric-up-alt', 'arrow-up-9-1'), ('sort-shapes-down', 'arrow-down-triangle-square'), ('sort-shapes-down-alt', 'arrow-down-square-triangle'), ('sort-shapes-up', 'arrow-up-triangle-square'), ('sort-shapes-up-alt', 'arrow-up-square-triangle'), ('sort-size-down', 'arrow-down-big-small'), ('sort-size-down-alt', 'arrow-down-small-big'), ('sort-size-up', 'arrow-up-big-small'), ('sort-size-up-alt', 'arrow-up-small-big'), ('soup', 'bowl-hot'), ('space-shuttle', 'shuttle-space'), ('space-station-moon-alt', 'space-station-moon-construction'), ('square-root-alt', 'square-root-variable'), ('star-half-alt', 'star-half-stroke'), ('starfighter-alt', 'starfighter-twin-ion-engine'), ('step-backward', 'backward-step'), ('step-forward', 'forward-step'), ('sticky-note', 'note-sticky'), ('stop-circle', 'circle-stop'), ('store-alt', 'shop'), ('store-alt-slash', 'shop-slash'), ('stream', 'bars-staggered'), ('subway', 'train-subway'), ('surprise', 'face-surprise'), ('swimmer', 'person-swimming'), ('swimming-pool', 'water-ladder'), ('sync', 'arrows-rotate'), ('sync-alt', 'rotate'), ('table-tennis', 'table-tennis-paddle-ball'), ('tablet-alt', 'tablet-screen-button'), ('tablet-android', 'tablet'), ('tablet-android-alt', 'tablet-screen'), ('tachometer', 'gauge-simple'), ('tachometer-alt', 'gauge'), ('tachometer-alt-average', 'gauge-med'), ('tachometer-alt-fast', 'gauge'), ('tachometer-alt-fastest', 'gauge-max'), ('tachometer-alt-slow', 'gauge-low'), ('tachometer-alt-slowest', 'gauge-min'), ('tachometer-average', 'gauge-simple-med'), ('tachometer-fast', 'gauge-simple'), ('tachometer-fastest', 'gauge-simple-max'), ('tachometer-slow', 'gauge-simple-low'), ('tachometer-slowest', 'gauge-simple-min'), ('tanakh', 'book-tanakh'), ('tasks', 'list-check'), ('tasks-alt', 'bars-progress'), ('telegram-plane', 'telegram'), ('temperature-down', 'temperature-arrow-down'), ('temperature-frigid', 'temperature-snow'), ('temperature-hot', 'temperature-sun'), ('temperature-up', 'temperature-arrow-up'), ('tenge', 'tenge-sign'), ('th', 'table-cells'), ('th-large', 'table-cells-large'), ('th-list', 'table-list'), ('theater-masks', 'masks-theater'), ('thermometer-empty', 'temperature-empty'), ('thermometer-full', 'temperature-full'), ('thermometer-half', 'temperature-half'), ('thermometer-quarter', 'temperature-quarter'), ('thermometer-three-quarters', 'temperature-three-quarters'), ('thumb-tack', 'thumbtack'), ('thunderstorm', 'cloud-bolt'), ('thunderstorm-moon', 'cloud-bolt-moon'), ('thunderstorm-sun', 'cloud-bolt-sun'), ('ticket-alt', 'ticket-simple'), ('times', 'xmark'), ('times-circle', 'circle-xmark'), ('times-hexagon', 'hexagon-xmark'), ('times-octagon', 'octagon-xmark'), ('times-square', 'square-xmark'), ('tint', 'droplet'), ('tint-slash', 'droplet-slash'), ('tired', 'face-tired'), ('toilet-paper-alt', 'toilet-paper-blank'), ('tombstone-alt', 'tombstone-blank'), ('tools', 'screwdriver-wrench'), ('torah', 'scroll-torah'), ('tram', 'train-tram'), ('transgender-alt', 'transgender'), ('trash-alt', 'trash-can'), ('trash-restore', 'trash-arrow-up'), ('trash-restore-alt', 'trash-can-arrow-up'), ('trash-undo-alt', 'trash-can-undo'), ('tree-alt', 'tree-deciduous'), ('triangle-music', 'triangle-instrument'), ('trophy-alt', 'trophy-star'), ('truck-couch', 'truck-ramp-couch'), ('truck-loading', 'truck-ramp-box'), ('tshirt', 'shirt'), ('tv-alt', 'tv'), ('undo', 'arrow-rotate-left'), ('undo-alt', 'rotate-left'), ('university', 'building-columns'), ('unlink', 'link-slash'), ('unlock-alt', 'unlock-keyhole'), ('usd-circle', 'circle-dollar'), ('usd-square', 'square-dollar'), ('user-alt', 'user-large'), ('user-alt-slash', 'user-large-slash'), ('user-chart', 'chart-user'), ('user-circle', 'circle-user'), ('user-cog', 'user-gear'), ('user-edit', 'user-pen'), ('user-friends', 'user-group'), ('user-hard-hat', 'user-helmet-safety'), ('user-md', 'user-doctor'), ('user-md-chat', 'user-doctor-message'), ('user-times', 'user-xmark'), ('users-class', 'screen-users'), ('users-cog', 'users-gear'), ('users-crown', 'user-group-crown'), ('utensil-fork', 'fork'), ('utensil-knife', 'knife'), ('utensil-spoon', 'spoon'), ('utensils-alt', 'fork-knife'), ('vhs', 'cassette-vhs'), ('volleyball-ball', 'volleyball'), ('volume-down', 'volume-low'), ('volume-mute', 'volume-xmark'), ('volume-up', 'volume-high'), ('vote-nay', 'xmark-to-slot'), ('vote-yea', 'check-to-slot'), ('walking', 'person-walking'), ('warehouse-alt', 'warehouse-full'), ('washer', 'washing-machine'), ('water-lower', 'water-arrow-down'), ('water-rise', 'water-arrow-up'), ('waveform-path', 'waveform-lines'), ('webcam', 'camera-web'), ('webcam-slash', 'camera-web-slash'), ('weight', 'weight-scale'), ('wifi-1', 'wifi-weak'), ('wifi-2', 'wifi-fair'), ('window-alt', 'window-flip'), ('window-close', 'rectangle-xmark'), ('wine-glass-alt', 'wine-glass-empty')) AS mapping(from_icon, to_icon)\n)\nUPDATE directory_columns\nSET icon =\n CASE\n WHEN icon LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)\n ELSE remaps.to_icon\n END\nFROM remaps\nWHERE icon = remaps.from_icon\n OR icon = CONCAT('fa-', remaps.from_icon)\n OR icon = CONCAT('far-', remaps.from_icon)\n OR icon = CONCAT('fab-', remaps.from_icon)\n OR icon = CONCAT('far fa-', remaps.from_icon)\n OR icon = CONCAT('fab fa-', remaps.from_icon)\n OR icon = CONCAT('fas fa-', remaps.from_icon);\n")
-> 0.0055s
-- execute("UPDATE directory_columns\nSET icon =\nCASE\n WHEN icon LIKE 'fas fa-%' THEN SUBSTRING(icon FROM 8)\n WHEN icon LIKE 'far fa-%' THEN CONCAT('far-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fab fa-%' THEN CONCAT('fab-', SUBSTRING(icon FROM 8))\n WHEN icon LIKE 'fa-%' THEN SUBSTRING(icon FROM 4)\n ELSE icon\nEND\nWHERE icon LIKE 'fa-%'\n OR icon LIKE 'far fa-%'\n OR icon LIKE 'fab fa-%'\n OR icon LIKE 'fas fa-%';\n")
-> 0.0003s
== 20241204085540 RemapToFa6IconNames: migrated (0.0600s) =====================
== 20241205035402 ChangeDefaultForBadgesIcon: migrating =======================
-- change_column_default(:badges, :icon, {:from=>"fa-certificate", :to=>"certificate"})
-> 0.0023s
-- execute("UPDATE badges\nSET icon = 'certificate'\nWHERE icon = 'fa-certificate';\n")
-> 0.0003s
== 20241205035402 ChangeDefaultForBadgesIcon: migrated (0.0032s) ==============
== 20241205162117 AddColumnsToMovedPosts: migrating ===========================
-- add_column(:moved_posts, :old_topic_title, :string)
-> 0.0010s
-- add_column(:moved_posts, :post_user_id, :integer)
-> 0.0003s
-- add_column(:moved_posts, :user_id, :integer)
-> 0.0002s
-- add_index(:moved_posts, [:new_topic_id, :post_user_id])
-> 0.0031s
== 20241205162117 AddColumnsToMovedPosts: migrated (0.0052s) ==================
== 20241206002425 DropExperimentalTopicsFilterSiteSetting: migrating ==========
-- execute("DELETE FROM site_settings\nWHERE name = 'experimental_topics_filter'\n")
-> 0.0002s
== 20241206002425 DropExperimentalTopicsFilterSiteSetting: migrated (0.0006s) =
== 20241206121401 DeleteCategoriesOnlyOptimizedSiteSetting: migrating =========
-- execute("DELETE FROM site_settings WHERE name = 'desktop_category_page_style' AND value = 'categories_only_optimized'")
-> 0.0002s
== 20241206121401 DeleteCategoriesOnlyOptimizedSiteSetting: migrated (0.0005s)
== 20241211030039 RemoveGlimmerPostMenuGroupsSetting: migrating ===============
-- execute("DELETE FROM site_settings\nWHERE name = 'glimmer_post_menu_groups'\n")
-> 0.0002s
== 20241211030039 RemoveGlimmerPostMenuGroupsSetting: migrated (0.0005s) ======
== 20241211222608 AddFullMoveToMovedPostRecords: migrating ====================
-- add_column(:moved_posts, :full_move, :boolean)
-> 0.0003s
== 20241211222608 AddFullMoveToMovedPostRecords: migrated (0.0007s) ===========
== 20241224191732 ChangeFullNameRequiredSetting: migrating ====================
== 20241224191732 ChangeFullNameRequiredSetting: migrated (0.0012s) ===========
== 20241226162229 AddChatSendShortcutPreference: migrating ====================
-- add_column(:user_options, :chat_send_shortcut, :integer, {:default=>0, :null=>false})
-> 0.0007s
== 20241226162229 AddChatSendShortcutPreference: migrated (0.0011s) ===========
== 20250115031117 RemoveUserProfileFromOverriddenRobots: migrating ============
-- select_value("SELECT value FROM site_settings WHERE name = 'overridden_robots_txt' AND value LIKE '%User-agent: *\nDisallow: /admin/\nDisallow: /auth/\nDisallow: /assets/browser-update*.js\nDisallow: /email/\nDisallow: /session\nDisallow: /user-api-key\nDisallow: /*?api_key*\nDisallow: /*?*api_key*\nDisallow: /badges\nDisallow: /u/%'")
-> 0.0002s
== 20250115031117 RemoveUserProfileFromOverriddenRobots: migrated (0.0006s) ===
== 20250116024516 UpdateFontSiteSettingsType: migrating =======================
-- execute("UPDATE site_settings SET data_type=8 WHERE name IN('base_font', 'heading_font')")
-> 0.0002s
== 20250116024516 UpdateFontSiteSettingsType: migrated (0.0005s) ==============
== 20250117065027 SetDefaultFontForExistingSites: migrating ===================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('base_font', 8, 'arial', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0002s
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('heading_font', 8, 'arial', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0002s
== 20250117065027 SetDefaultFontForExistingSites: migrated (0.0029s) ==========
== 20250119222805 FillFastTypingThresholdBasedOnDeprecatedSetting: migrating ==
== 20250119222805 FillFastTypingThresholdBasedOnDeprecatedSetting: migrated (0.0005s)
== 20250120115539 AddDarkHexToColorSchemeColor: migrating =====================
-- add_column(:color_scheme_colors, :dark_hex, :string, {:limit=>6})
-> 0.0004s
== 20250120115539 AddDarkHexToColorSchemeColor: migrated (0.0007s) ============
== 20250121180125 CreateThemeColorScheme: migrating ===========================
-- create_table(:theme_color_schemes)
-> 0.0039s
-- add_index(:theme_color_schemes, :theme_id, {:unique=>true})
-> 0.0027s
-- add_index(:theme_color_schemes, :color_scheme_id, {:unique=>true})
-> 0.0029s
== 20250121180125 CreateThemeColorScheme: migrated (0.0100s) ==================
== 20250124062108 RemapDeprecatedIconNamesForSeededBadges: migrating ==========
-- execute("WITH remaps AS (\n SELECT from_icon, to_icon\n FROM (VALUES ('smile', 'face-smile'), ('share-alt', 'share-nodes'))\n AS mapping(from_icon, to_icon)\n)\nUPDATE badges\nSET icon = remaps.to_icon\nFROM remaps\nWHERE icon = remaps.from_icon;\n")
-> 0.0005s
== 20250124062108 RemapDeprecatedIconNamesForSeededBadges: migrated (0.0009s) =
== 20250130205841 FixIncorrectFastTypingThresholdSetting: migrating ===========
-- execute("UPDATE site_settings SET value = 'disabled' WHERE name = 'fast_typing_threshold' AND value = 'off'")
-> 0.0002s
== 20250130205841 FixIncorrectFastTypingThresholdSetting: migrated (0.0005s) ==
== 20250205174221 AddSerializeTopicOpLikesDataThemeModifier: migrating ========
-- add_column(:theme_modifier_sets, :serialize_topic_op_likes_data, :boolean, {:null=>true})
-> 0.0004s
== 20250205174221 AddSerializeTopicOpLikesDataThemeModifier: migrated (0.0007s)
== 20250212044021 RenameAllowAllUsersToFlagIllegalContentSiteSetting: migrating
-- execute("UPDATE site_settings SET name = 'allow_all_users_to_flag_illegal_content' where name = 'allow_tl0_and_anonymous_users_to_flag_illegal_content'")
-> 0.0002s
== 20250212044021 RenameAllowAllUsersToFlagIllegalContentSiteSetting: migrated (0.0005s)
== 20250212045125 AddTypeSourceToReviewable: migrating ========================
-- add_column(:reviewables, :type_source, :string, {:null=>false, :default=>"unknown"})
-> 0.0006s
== 20250212045125 AddTypeSourceToReviewable: migrated (0.0023s) ===============
== 20250217003916 XSummaryLargeImageBasedOnDeprecatedSetting: migrating =======
== 20250217003916 XSummaryLargeImageBasedOnDeprecatedSetting: migrated (0.0007s)
== 20250220045740 AddContextToReviewableScores: migrating =====================
-- add_column(:reviewable_scores, :context, :string)
-> 0.0004s
== 20250220045740 AddContextToReviewableScores: migrated (0.0007s) ============
== 20250220090521 AddLastUnreadMessageWhenEmailedIdToChatThreadMemberships: migrating
-- add_column(:user_chat_thread_memberships, :last_unread_message_when_emailed_id, :bigint)
-> 0.0003s
== 20250220090521 AddLastUnreadMessageWhenEmailedIdToChatThreadMemberships: migrated (0.0006s)
== 20250227142351 MigrateSidekiqJobs: migrating ===============================
== 20250227142351 MigrateSidekiqJobs: migrated (0.0025s) ======================
== 20250304034313 AddComposerColumnsToPostStat: migrating =====================
-- add_column(:post_stats, :composer_version, :integer)
-> 0.0004s
-- add_column(:post_stats, :writing_device, :string)
-> 0.0032s
-- add_column(:post_stats, :writing_device_user_agent, :string)
-> 0.0003s
== 20250304034313 AddComposerColumnsToPostStat: migrated (0.0044s) ============
== 20250304054720 AddScopeModeToApiKeys: migrating ============================
-- add_column(:api_keys, :scope_mode, :integer, {:null=>true})
-> 0.0004s
== 20250304054720 AddScopeModeToApiKeys: migrated (0.0007s) ===================
== 20250304074934 BackfillApiKeyScopeModes: migrating =========================
== 20250304074934 BackfillApiKeyScopeModes: migrated (0.0010s) ================
== 20250305233449 PopulateTypeSourceInReviewable: migrating ===================
== 20250305233449 PopulateTypeSourceInReviewable: migrated (0.0020s) ==========
== 20250307031538 MigrateCategoryToCategoriesPostCreated: migrating ===========
-- execute("DELETE FROM discourse_automation_fields\nWHERE name = 'restricted_categories'\n AND target = 'trigger'\n AND automation_id IN (\n SELECT id FROM discourse_automation_automations\n WHERE trigger = 'post_created_edited'\n )\n")
-> 0.0004s
-- execute("INSERT INTO discourse_automation_fields (\n automation_id, component, name, target, metadata, created_at, updated_at\n)\nSELECT\n f.automation_id,\n 'categories' as component,\n 'restricted_categories' as name,\n f.target,\n jsonb_build_object('value', ARRAY[CAST(f.metadata->>'value' AS INTEGER)]) as metadata,\n NOW() as created_at,\n NOW() as updated_at\nFROM discourse_automation_fields f\nJOIN discourse_automation_automations a ON a.id = f.automation_id\nWHERE f.component = 'category'\nAND f.name = 'restricted_category'\nAND f.target = 'trigger'\nAND f.metadata->>'value' IS NOT NULL\nAND a.trigger = 'post_created_edited'\n")
-> 0.0003s
== 20250307031538 MigrateCategoryToCategoriesPostCreated: migrated (0.0011s) ==
== 20250307034117 RemoveOldAdminSidebarEnabledGroupsSiteSettings: migrating ===
-- execute("DELETE FROM site_settings WHERE name = 'admin_sidebar_enabled_groups'")
-> 0.0002s
== 20250307034117 RemoveOldAdminSidebarEnabledGroupsSiteSettings: migrated (0.0006s)
== 20250311041851 AddIndexToPostStatComposerColumns: migrating ================
-- remove_index(:post_stats, :composer_version, {:algorithm=>:concurrently, :if_exists=>true})
-> 0.0014s
-- remove_index(:post_stats, :writing_device, {:algorithm=>:concurrently, :if_exists=>true})
-> 0.0011s
-- add_index(:post_stats, :composer_version, {:algorithm=>:concurrently})
-> 0.0032s
-- add_index(:post_stats, :writing_device, {:algorithm=>:concurrently})
-> 0.0028s
== 20250311041851 AddIndexToPostStatComposerColumns: migrated (0.0091s) =======
== 20250311073009 EnableWelcomeBannerNewSites: migrating ======================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nVALUES('enable_welcome_banner', 5, 'f', NOW(), NOW())\nON CONFLICT (name) DO NOTHING\n")
-> 0.0003s
== 20250311073009 EnableWelcomeBannerNewSites: migrated (0.0012s) =============
== 20250313044812 RemoveUniqueConstraintFromTagUsersIndexes: migrating ========
-- remove_index(:tag_users, {:name=>:idx_tag_users_ix1, :algorithm=>:concurrently, :if_exists=>true})
-> 0.0079s
-- remove_index(:tag_users, {:name=>:idx_tag_users_ix2, :algorithm=>:concurrently, :if_exists=>true})
-> 0.0074s
-- remove_index(:tag_users, [:user_id, :tag_id, :notification_level], {:algorithm=>:concurrently, :if_exists=>true})
-> 0.0014s
-- remove_index(:tag_users, [:tag_id, :user_id, :notification_level], {:algorithm=>:concurrently, :if_exists=>true})
-> 0.0011s
-- add_index(:tag_users, [:user_id, :tag_id, :notification_level], {:algorithm=>:concurrently})
-> 0.0028s
-- add_index(:tag_users, [:tag_id, :user_id, :notification_level], {:algorithm=>:concurrently})
-> 0.0028s
== 20250313044812 RemoveUniqueConstraintFromTagUsersIndexes: migrated (0.0242s)
== 20250313045010 AddIndexToUsersIpAddress: migrating =========================
-- remove_index(:users, :ip_address, {:algorithm=>:concurrently, :name=>"idx_users_ip_address", :if_exists=>true})
-> 0.0032s
-- add_index(:users, :ip_address, {:algorithm=>:concurrently, :name=>"idx_users_ip_address"})
-> 0.0034s
== 20250313045010 AddIndexToUsersIpAddress: migrated (0.0073s) ================
[2025-03-19 02:09:40] Reconnecting to the database...
[2025-03-19 02:09:40] Reloading site settings...
[2025-03-19 02:09:40] Disabling outgoing emails for non-staff users...
[2025-03-19 02:09:40] Disabling readonly mode...
[2025-03-19 02:09:40] Clearing category cache...
[2025-03-19 02:09:40] Reloading translations...
[2025-03-19 02:09:40] Remapping uploads...
[2025-03-19 02:09:40] Restoring uploads, this may take a while...
[2025-03-19 02:10:00] EXCEPTION: 1 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.
[2025-03-19 02:10:00] /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:81:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:383:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:354:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:167:in `restore_uploads'
/var/www/discourse/lib/backup_restore/restorer.rb:71:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:20:in `restore'
/var/www/discourse/script/spawn_backup_restore.rb:33:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2025-03-19 02:10:00] Trying to rollback...
[2025-03-19 02:10:00] Rolling back...
[2025-03-19 02:10:00] Cleaning stuff up...
[2025-03-19 02:10:00] Dropping functions from the discourse_functions schema...
[2025-03-19 02:10:00] Removing tmp '/var/www/discourse/tmp/restores/default/2025-03-19-020905' directory...
[2025-03-19 02:10:00] Unpausing sidekiq...
[2025-03-19 02:10:00] Marking restore as finished...
[2025-03-19 02:10:00] Notifying 'Admin' of the end of the restore...
I think this is everything and I apologize for posting so much.
我认为这是重要的一行。我没有看到附近有任何有用的支持信息,所以虽然答案可能只是对您的数据库进行一些小的调整,但我不知道您将如何找出哪篇帖子未能重新映射。
是否有一种方法可以仅迁移数据库?或者我可以在不还原的情况下重新映射 S3 中的现有图像?
这是问题所在。你需要找到不在 s3 上的上传项,我猜是这样。
这听起来像是 Can't restore a backup if it includes link to Discourse onebox 中提到的问题 ![]()
您应该能够在恢复过程中修复此问题,但需要在 shell 中进行操作。
cd /var/discourse
./launcher enter app
# 使用 --pause 参数开始恢复
discourse restore --pause <backup_filename>
它将在两个点暂停恢复过程:
uploads 表(尚未运行任何重新映射),这允许您在恢复过程因它们而中止之前修复上传。现在,打开到服务器的另一个 SSH 会话并启动 rails 控制台:
cd /var/discourse
./launcher enter app
rails c
您需要找出哪个 Post 导致恢复失败。如果运气好的话,您可以通过在 rails 控制台中执行以下命令找到它:
current_db = RailsMultisite::ConnectionManagement.current_db
cdn_path = SiteSetting.cdn_path("/uploads/#{current_db}/original").sub(/https?:/, "")
Post.where("cooked LIKE '%#{cdn_path}%'")
我不知道那个!
所以这似乎找到了几篇文章,但我不知道如何在完成恢复上传之前删除或修复它们。
[#<Post:0x0000fbe1dfc5bbe8
id: 210,
user_id: 1,
topic_id: 76,
post_number: 1,
raw: " [poll type=multiple results=always min=1 max=2 cha...",
cooked: "<div class=\"poll\" data-poll-status=\"open\" data-pol...",
created_at: "2020-01-02 19:41:05.980378000 +0000",
updated_at: "2020-01-04 01:18:37.573545000 +0000",
reply_to_post_number: nil,
reply_count: 0,
quote_count: 0,
deleted_at: nil,
off_topic_count: 0,
like_count: 0,
incoming_link_count: 2,
bookmark_count: 0,
score: 13.0,
reads: 15,
post_type: 1,
sort_order: 1,
last_editor_id: 1,
hidden: false,
hidden_reason_id: nil,
notify_moderators_count: 0,
spam_count: 0,
illegal_count: 0,
inappropriate_count: 0,
last_version_at: "2020-01-02 19:47:03.890656000 +0000",
user_deleted: false,
reply_to_user_id: nil,
percent_rank: 0.1111111111111111,
notify_user_count: 0,
like_score: 0,
deleted_by_id: nil,
edit_reason: nil,
word_count: 30,
version: 2,
cook_method: 1,
wiki: false,
baked_at: "2020-01-24 18:29:52.371387000 +0000",
baked_version: 2,
hidden_at: nil,
self_edits: 1,
reply_quoted: false,
via_email: false,
raw_email: nil,
Preparing full inspection value...
=>
[#<Post:0x0000fbe1dfc5bbe8
id: 210,
user_id: 1,
topic_id: 76,
post_number: 1,
raw: " [poll type=multiple results=always min=1 max=2 cha...",
cooked: "<div class=\"poll\" data-poll-status=\"open\" data-pol...",
created_at: "2020-01-02 19:41:05.980378000 +0000",
updated_at: "2020-01-04 01:18:37.573545000 +0000",
reply_to_post_number: nil,
reply_count: 0,
quote_count: 0,
deleted_at: nil,
off_topic_count: 0,
like_count: 0,
incoming_link_count: 2,
bookmark_count: 0,
score: 13.0,
reads: 15,
post_type: 1,
sort_order: 1,
last_editor_id: 1,
hidden: false,
hidden_reason_id: nil,
notify_moderators_count: 0,
spam_count: 0,
illegal_count: 0,
inappropriate_count: 0,
last_version_at: "2020-01-02 19:47:03.890656000 +0000",
user_deleted: false,
reply_to_user_id: nil,
percent_rank: 0.1111111111111111,
notify_user_count: 0,
like_score: 0,
deleted_by_id: nil,
edit_reason: nil,
word_count: 30,
version: 2,
cook_method: 1,
wiki: false,
baked_at: "2020-01-24 18:29:52.371387000 +0000",
baked_version: 2,
hidden_at: nil,
self_edits: 1,
reply_quoted: false,
via_email: false,
raw_email: nil,
public_version: 2,
:...skipping...
=>
[#<Post:0x0000fbe1dfc5bbe8
id: 210,
user_id: 1,
topic_id: 76,
post_number: 1,
raw: " [poll type=multiple results=always min=1 max=2 cha...",
cooked: "<div class=\"poll\" data-poll-status=\"open\" data-pol...",
created_at: "2020-01-02 19:41:05.980378000 +0000",
updated_at: "2020-01-04 01:18:37.573545000 +0000",
reply_to_post_number: nil,
reply_count: 0,
quote_count: 0,
deleted_at: nil,
off_topic_count: 0,
like_count: 0,
incoming_link_count: 2,
bookmark_count: 0,
score: 13.0,
reads: 15,
post_type: 1,
sort_order: 1,
last_editor_id: 1,
hidden: false,
hidden_reason_id: nil,
notify_moderators_count: 0,
spam_count: 0,
illegal_count: 0,
inappropriate_count: 0,
last_version_at: "2020-01-02 19:47:03.890656000 +0000",
user_deleted: false,
reply_to_user_id: nil,
percent_rank: 0.1111111111111111,
notify_user_count: 0,
like_score: 0,
deleted_by_id: nil,
edit_reason: nil,
word_count: 30,
version: 2,
cook_method: 1,
wiki: false,
baked_at: "2020-01-24 18:29:52.371387000 +0000",
baked_version: 2,
hidden_at: nil,
self_edits: 1,
reply_quoted: false,
via_email: false,
raw_email: nil,
public_version: 2,
action_code: nil,
locked_by_id: nil,
image_upload_id: 50,
outbound_message_id: nil>,
#<Post:0x0000fbe1dfbf74e0
id: 296,
user_id: 17,
topic_id: 102,
post_number: 1,
raw: "Hello everybody!\n I would like to try to debate th...",
cooked: "<p>Hello everybody!<br>\nI would like to try to deb...",
created_at: "2020-01-19 18:20:12.690712000 +0000",
updated_at: "2021-01-16 01:26:03.982006000 +0000",
reply_to_post_number: nil,
reply_count: 0,
quote_count: 0,
deleted_at: nil,
off_topic_count: 0,
like_count: 0,
incoming_link_count: 2,
bookmark_count: 0,
score: 12.4,
reads: 12,
:
我搞定了。 感谢大家的帮助!
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.