Files
upstream-mattermost/server/channels/db/migrations/postgres/000046_create_users.up.sql
upstream-mirror 240db4e2a7
Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
snapshot of https://github.com/mattermost/mattermost.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 00:29:55 +05:00

89 lines
3.4 KiB
SQL

CREATE TABLE IF NOT EXISTS users (
id VARCHAR(26) PRIMARY KEY,
createat bigint,
updateat bigint,
deleteat bigint,
username VARCHAR(64) UNIQUE,
password VARCHAR(128),
authdata VARCHAR(128) UNIQUE,
authservice VARCHAR(32),
email VARCHAR(128) UNIQUE,
emailverified boolean,
nickname VARCHAR(64),
firstname VARCHAR(64),
lastname VARCHAR(64),
roles VARCHAR(256),
allowmarketing boolean,
props VARCHAR(4000),
notifyprops VARCHAR(2000),
lastpasswordupdate bigint,
lastpictureupdate bigint,
failedattempts integer,
locale VARCHAR(5),
mfaactive boolean,
mfasecret VARCHAR(128)
);
ALTER TABLE users DROP COLUMN IF EXISTS lastactivityat;
ALTER TABLE users DROP COLUMN IF EXISTS lastpingat;
ALTER TABLE users ADD COLUMN IF NOT EXISTS position VARCHAR(128);
ALTER TABLE users ADD COLUMN IF NOT EXISTS timezone VARCHAR(256) DEFAULT '{"automaticTimezone":"","manualTimezone":"","useAutomaticTimezone":"true"}';
ALTER TABLE users ALTER COLUMN position TYPE VARCHAR(128);
DO $$
<< migrate_if_version_below_4100 >>
DECLARE
current_db_version VARCHAR(100) := '';
BEGIN
SELECT
value INTO current_db_version
FROM
systems
WHERE
name = 'Version';
IF (string_to_array(current_db_version, '.') < string_to_array('4.10.0', '.')) THEN
UPDATE Users SET AuthData=LOWER(AuthData) WHERE AuthService = 'saml';
END IF;
END migrate_if_version_below_4100
$$;
DO $$
DECLARE
column_exist boolean := false;
BEGIN
SELECT count(*) != 0 INTO column_exist
FROM information_schema.columns
WHERE table_name = 'users'
AND table_schema = current_schema()
AND column_name = 'roles'
AND NOT data_type = 'varchar(256)';
IF column_exist THEN
ALTER TABLE users ALTER COLUMN roles TYPE varchar(256);
END IF;
END $$;
CREATE INDEX IF NOT EXISTS idx_users_update_at ON users (updateat);
CREATE INDEX IF NOT EXISTS idx_users_create_at ON users (createat);
CREATE INDEX IF NOT EXISTS idx_users_delete_at ON users (deleteat);
CREATE INDEX IF NOT EXISTS idx_users_email_lower_textpattern ON users (lower(email) text_pattern_ops);
CREATE INDEX IF NOT EXISTS idx_users_username_lower_textpattern ON users (lower(username) text_pattern_ops);
CREATE INDEX IF NOT EXISTS idx_users_nickname_lower_textpattern ON users (lower(nickname) text_pattern_ops);
CREATE INDEX IF NOT EXISTS idx_users_firstname_lower_textpattern ON users (lower(firstname) text_pattern_ops);
CREATE INDEX IF NOT EXISTS idx_users_lastname_lower_textpattern ON users (lower(lastname) text_pattern_ops);
CREATE INDEX IF NOT EXISTS idx_users_all_txt ON users USING gin(to_tsvector('english', username || ' ' || firstname || ' ' || lastname || ' ' || nickname || ' ' || email));
CREATE INDEX IF NOT EXISTS idx_users_all_no_full_name_txt ON users USING gin(to_tsvector('english', username || ' ' || nickname || ' ' || email));
CREATE INDEX IF NOT EXISTS idx_users_names_txt ON users USING gin(to_tsvector('english', username || ' ' || firstname || ' ' || lastname || ' ' || nickname));
CREATE INDEX IF NOT EXISTS idx_users_names_no_full_name_txt ON users USING gin(to_tsvector('english', username || ' ' || nickname));
DROP INDEX IF EXISTS idx_users_email_lower;
DROP INDEX IF EXISTS idx_users_username_lower;
DROP INDEX IF EXISTS idx_users_nickname_lower;
DROP INDEX IF EXISTS idx_users_firstname_lower;
DROP INDEX IF EXISTS idx_users_lastname_lower;
ALTER TABLE users ADD COLUMN IF NOT EXISTS remoteid VARCHAR(26);
DROP INDEX IF EXISTS idx_users_email;