Skip to main content

Database

PostgreSQL holds what must survive a restart. The schema is created and migrated by Liquibase (common/src/main/resources/db/changelog/), when enableLiquibase (game server) or createStructure (proxy) is on.

players​

ColumnTypeWhat it is
iduuidThe player's id (primary key).
namevarchar(25)Their name (indexed, to find a player by name).
datajsonbTheir profile data: settings and what the modules store, each under its own key.
permissionsjsonbTheir groups (with duration) and own permissions.
created_attimestamptzFirst join.
lockvarchar(255)SERVER_ID of the server that owns the profile, or empty.
lock_expires_attimestamptzWhen that lock lapses unless renewed.

player_groups​

ColumnTypeWhat it is
iduuidThe group's id.
namevarchar(30)Its name.
priorityintegerThe lowest one is a player's main group.
prefix, suffixvarchar(50)Shown around the player's name.
permissionsjsonbIts permissions.
created_attimestamptz

player_vault​

Numeric counters (currencies, statistics), one row per player and key, changed atomically in the database rather than through the profile.

ColumnTypeWhat it is
player_iduuidThe player.
keyvarchar(255)What is counted.
valuenumericThe amount.

Redis​

Redis holds only what can be lost: who is online, on which server and type of server, with entries that expire on their own.