SYMPA_DATABASE(5)
π NAME π
sympa_database β Structure of Sympa core database. yeah that's literally it, that's the whole legend β¨
quick vibe check for context bestie: this isSYMPA_DATABASE(5), fromsympa 6.2.80π
π DECRIPTION π
(not me spelling it exactly like the original, it fr says DECRIPTION in the source, i don't make the rules π)
okay so. The core database of Sympa is based on SQL. In the following list of tables and indexes, the data types are based on MySQL/MariaDB. Corresponding types are used by other platforms (PostgreSQL, SQLite, ...) β so MySQL/MariaDB is giving main character energy on the type names, and the rest of the platforms are matching the vibe π
β¨ Tables β¨
π subscriber_table
This table stores subscription, subscription options, etc... like the whole "who's subscribed and how do they want their mail" situation.
Fields:
user_subscribervarchar(100)(Primary key) β email of subscriber πlist_subscribervarchar(50)(Primary key) β list name of a subscriptionrobot_subscribervarchar(80)(Primary key) β robot (domain) of the listreception_subscribervarchar(20)β reception format option of subscriber (digest, summary, etc.) π©suspend_subscriberint(1)β boolean, set to1if subscription is suspended π«suspend_start_date_subscriberint(11)β the Unix time when message reception was suspendedsuspend_end_date_subscriberint(11)β the Unix time when message reception should be restoredbounce_subscribervarchar(35)β unix time of first bounce / unix time of last bounce / nb of bounces / error code πbounce_score_subscribersmallint(6)β bounce score for this subscriberbounce_address_subscribervarchar(100)β VERP bounce addressdate_epoch_subscriberint(11) not nullβ date of subscriptionupdate_epoch_subscriberint(11)β last time subscription was confirmed by subscriberinclusion_subscriberint(11)β last time subscribers' list was synchronized with data sourceinclusion_ext_subscriberint(11)β last time subscribers' list was synchronized with external data sourceinclusion_label_subscribervarchar(50)β name of data sourcecomment_subscribervarchar(150)β display name of subscribernumber_messages_subscriberint(5) not nullβ the number of messages the subscriber sentvisibility_subscribervarchar(20)β visibility of subscriber in list review pagetopics_subscribervarchar(200)β topic subscription specificationsubscribed_subscriberint(1)β boolean, set to1if subscriber comes from ADD or SUBcustom_attribute_subscribertextβ custom attribute(s) of subscriber π
Indexes:
subscriber_user_indexβuser_subscriber
π€ user_table
The user_table is mainly used to manage login from web interface. A subscriber may not appear in the user_table if they never log through the web interface. (they're in the database but not in the database, iykyk β¨)
Fields:
email_uservarchar(100)(Primary key) β email of userpassword_uservarchar(64)β password are stored as finger print πgecos_uservarchar(150)β display name of userlast_login_date_userint(11)β Unix time of last login, printed in login result for security purposelast_login_host_uservarchar(60)β host of last login, printed in login result for security purposewrong_login_count_userint(11)β login attempt count, used to prevent brute force attack π₯last_active_date_userint(11)β the last Unix time when this user was confirmed their activity bypurge_user_tabletaskcookie_delay_userint(11)β user cookie max age in minutes (0is session) πͺlang_uservarchar(10)β user language preferenceattributes_usertextβ user custom attributesdata_usertextβ user misc WUI preferences
π inclusion_table
The inclusion table is used in order to manage lists included from / including subscribers of other lists. it's giving "lists dating lists" π
Fields:
target_inclusionvarchar(131)(Primary key) β list ID of including listrole_inclusionenum('member','owner','editor')(Primary key) β role of included usersource_inclusionvarchar(131)(Primary key) β list ID of included listupdate_epoch_inclusionint(11)β the date this entry was created or updated
πͺ exclusion_table
The exclusion table is used in order to manage unsubscription for subscriber included from an external data source.
Fields:
list_exclusionvarchar(57)(Primary key) β name of the listrobot_exclusionvarchar(80)(Primary key) β robot (domain) of the listuser_exclusionvarchar(100)(Primary key) β excluded subscriber email addressfamily_exclusionvarchar(50)(Primary key) β family of the listdate_exclusionint(11)β the date this entry was created or updated
πͺ session_table
Management of HTTP session. yes bestie, the whole "are you still logged in" of it all.
Fields:
id_sessionvarchar(30)(Primary key) β the identifier of the database recordprev_id_sessionvarchar(30)β previous identifier of the database recordstart_date_sessionint(11) not nullβ the date when the session was createddate_sessionint(11) not nullβ Unix time of the last use of this session. It is used in order to expire old sessions β³refresh_date_sessionint(11)β Unix time of the last refresh of this session. It is used in order to refresh available sessionsremote_addr_sessionvarchar(60)β the IP address of the computer from which the session was createdrobot_sessionvarchar(80)β the virtual host in which the session was createdemail_sessionvarchar(100)β the email associated to this sessionhit_sessionint(11)β the number of hit performed during this session. Used to detect crawlers π·οΈdata_sessiontextβ parameters attached to this session that don't have a dedicated column in the database
Indexes:
session_prev_id_indexβprev_id_session
ποΈ one_time_ticket_table
One time ticket are random value used for authentication challenge. A ticket is associated with a context which look like a session. one and done, iconic behavior fr π
Fields:
ticket_one_time_ticketvarchar(30)(Primary key) β random value of the one time ticketemail_one_time_ticketvarchar(100)β email associated with one time ticketrobot_one_time_ticketvarchar(80)β robot (domain) of the one time ticketdate_one_time_ticketint(11)β the date this entry was created or updateddata_one_time_ticketvarchar(200)β data associated with one time ticketremote_addr_one_time_ticketvarchar(60)β Remote address associated with one time ticketstatus_one_time_ticketvarchar(60)β status of one time ticket
π¬ notification_table
Used for message tracking feature. If the list is configured for tracking, outgoing messages include a delivery status notification request and optionally a message disposition notification request. When DSN and MDN are received by Sympa, they are stored in this table in relation with the related list and message ID. it's the receipts folder of the database bestie π§Ύ
Fields:
pk_notificationbigint(20) auto_increment(Primary key) β autoincrement key π’message_id_notificationvarchar(100)β initial message-id. This field is used to search DSN and MDN related to a particular messagerecipient_notificationvarchar(100)β email address of recipient for which a DSN or MDN was receivedreception_option_notificationvarchar(20)β the subscription option of the subscriber when the related message was sent to the list. Useful because some recipient may have option such as digest or nomailstatus_notificationvarchar(100)β value of notificationarrival_date_notificationvarchar(80)β reception date of latest DSN or MDNarrival_epoch_notificationint(11)β reception date of latest DSN or MDNtype_notificationenum('DSN', 'MDN')β type of the notification (DSN or MDN)list_notificationvarchar(50)β the listname the message was issued forrobot_notificationvarchar(80)β the robot the message is related todate_notificationint(11) not nullβ the date this entry was created or updated
π logs_table
Each important event is stored in this table. List owners and listmaster can search entries in this table using web interface. yes the group chat receipts live here π
Fields:
user_email_logsvarchar(100)β e-mail address of the message sender or email of identified web interface user (or soap user)date_logsint(11) not nullβ date when the action was executedusec_logsint(6)β subsecond in microsecond when the action was executed β±οΈrobot_logsvarchar(80)β name of the robot in which context the action was executedlist_logsvarchar(50)β name of the mailing-list in which context the action was executedaction_logsvarchar(50) not nullβ name of the Sympa subroutine which initiated the logparameters_logsvarchar(100)β comma-separated list of parameters. The amount and type of parameters can differ from an action to anothertarget_email_logsvarchar(100)β e-mail address (if any) targeted by the messagemsg_id_logsvarchar(255)β identifier of the message which triggered the actionstatus_logsvarchar(10) not nullβ exit status of the action. If it was an error, it is likely that theerror_type_logsfield will contain a description of this error πerror_type_logsvarchar(150)β name of the error string - if any - issued by the subroutineclient_logsvarchar(100)β IP address of the client machine from which the message was sentdaemon_logsvarchar(10) not nullβ name of the Sympa daemon which ran the action
π stat_table
Statistics item are stored in this table, Sum average and so on are stored in stat_counter_table.
Fields:
date_statint(11) not nullβ unix epoch this entry was created or updatedemail_statvarchar(100)β user email who ran the taskoperation_statvarchar(50) not nullβ operation thas was runlist_statvarchar(50)β list name against which the task was rundaemon_statvarchar(20)β daemon which ran the taskuser_ip_statvarchar(100)β remote ip of userrobot_statvarchar(80) not nullβ domain (robot) of the listparameter_statvarchar(50)β unused except to store message size onsend_mailπread_stattinyint(1) not nullβ data was aggregated instat_counter_table
Indexes:
stats_user_indexβemail_stat
π’ stat_counter_table
Used in conjunction with stat_table for users statistics.
Fields:
end_date_counterint(11)β unix time for the end of the statsbeginning_date_counterint(11) not nullβ unix time for the beginning of the statsdata_countervarchar(50) not nullβ type of operationrobot_countervarchar(80) not nullβ domain (robot)list_countervarchar(50)β list
kay bestie that's not even the whole thing β there's more of this page coming, so don't go anywhere π
count_counterintβ the number of occurences, that's it, that's the whole vibe π
β¨ the admin_table era β¨
okay so bestie, this table is an internal cache where all the list admin roles get stored. and literally that's all it is β a cache. it does not need to be saved π«Ά you can absolutely wipe its content if you want, no harm done. the only consequence? your next Sympa startup will lowkey be slower. that's the whole tradeoff. iconic.
π Fields π
user_adminvarchar(100)(Primary key) β the email of the admin π§list_adminvarchar(50)(Primary key) β the list namerobot_adminvarchar(80)(Primary key) β the list domainrole_adminenum('listmaster','owner','editor')(Primary key) β what role this user has for this list (editor, owner, or listmaster β which is basically a kind of list owner too, so π )profile_adminenum('privileged','normal')β the privilege level for this owner, and the value is either normal or privileged. the privileges attached to those are listed inedit_list.conf, iykyk.date_epoch_adminint(11) not nullβ the date this user became a list admin ποΈupdate_epoch_adminint(11)β last update timeinclusion_adminint(11)β the last time the list user was synchronized with a data sourceinclusion_ext_adminint(11)β the last time the list user was synchronized with an external data sourceinclusion_label_adminvarchar(50)β name of the data sourcereception_adminvarchar(20)β email reception option for list management messagesvisibility_adminvarchar(20)β whether the admin's user email can be hidden in the list web page description πcomment_adminvarchar(150)β display name of the adminsubscribed_adminint(1)β set to 1 if the user is a list admin by definition in the list config fileinfo_adminvarchar(150)β private info, usually dedicated to listmasters who need some extra details about list owners π
π Indexes π
admin_user_indexβ onuser_admin
π netidmap_table π
this one stores the info for users logging in with SSO. single sign-on besties rise up β¨
π Fields π
netid_netidmapvarchar(100)(Primary key) β user netidserviceid_netidmapvarchar(100)(Primary key) β SSO servicerobot_netidmapvarchar(80)(Primary key) β robot (domain)email_netidmapvarchar(100)β user email
π conf_table π
the conf table is where the parameter values for robots live. it's giving settings headquarters.
π Fields π
robot_confvarchar(80)(Primary key) β the robot (domain) of the conflabel_confvarchar(80)(Primary key) β the parameter name of the confvalue_confvarchar(300)β the value of parameter label_conf of robot robot_conf. yes it's a whole chain of "the thing of the thing", we love a reference π
π¦ list_table π¦
the list_table holds the cached list config plus a few items that help with searching lists. it's literally doing the most for you.
π Fields π
name_listvarchar(50)(Primary key) β name of the listrobot_listvarchar(80)(Primary key) β name of the robot (domain) that the list belongs tofamily_listvarchar(50)β name of the family the list belongs tostatus_listenum('open','closed','pending','error_config','family_closed')β the status of the listcreation_email_listvarchar(100)β email of the user who created the listcreation_epoch_listint(11)β UNIX time when the list was created β°update_email_listvarchar(100)β email of the user who updated the listupdate_epoch_listint(11)β UNIX time when the list was updatedsearchkey_listvarchar(255)β case-folded list subject, there to help with searchingweb_archive_listtinyint(1)β whether the list has archives πtopics_listvarchar(255)β the topics of the list, separated and enclosed by commas. yes both. comma supremacy πtotal_listint(7)β estimated number of subscribers
π SEE ALSO π
Sympa Administration Manual. https://www.sympa.community/manual/ β go read it bestie, it's the moment π
and that's a wrap on this one! this page was served fresh from version 6.2.80, dated 2026-10-19, and it is β say it with me β SYMPA_DATABASE(5) π
β¨ slay, go forth and query responsibly π«Άπ
π¦ where this page comes from
- fedora 43: sympa 6.2.80-2.fc43 Β· GPL-2.0-or-later AND (OFL-1.1-RFN AND MIT) AND OFL-1.1-RFN AND MIT and (MIT OR GPL-2.0-only)
- fedora 44: sympa 6.2.80-2.fc44 Β· GPL-2.0-or-later AND (OFL-1.1-RFN AND MIT) AND OFL-1.1-RFN AND MIT and (MIT OR GPL-2.0-only)
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms