1mnesia(3) Erlang Module Definition mnesia(3)
2
3
4
6 mnesia - A distributed telecommunications DBMS
7
9 The following are some of the most important and attractive capabili‐
10 ties provided by Mnesia:
11
12 * A relational/object hybrid data model that is suitable for telecom‐
13 munications applications.
14
15 * A DBMS query language, Query List Comprehension (QLC) as an add-on
16 library.
17
18 * Persistence. Tables can be coherently kept on disc and in the main
19 memory.
20
21 * Replication. Tables can be replicated at several nodes.
22
23 * Atomic transactions. A series of table manipulation operations can
24 be grouped into a single atomic transaction.
25
26 * Location transparency. Programs can be written without knowledge of
27 the actual data location.
28
29 * Extremely fast real-time data searches.
30
31 * Schema manipulation routines. The DBMS can be reconfigured at run‐
32 time without stopping the system.
33
34 This Reference Manual describes the Mnesia API. This includes functions
35 that define and manipulate Mnesia tables.
36
37 All functions in this Reference Manual can be used in any combination
38 with queries using the list comprehension notation. For information
39 about the query notation, see the qlc manual page in STDLIB.
40
41 Data in Mnesia is organized as a set of tables. Each table has a name
42 that must be an atom. Each table is made up of Erlang records. The user
43 is responsible for the record definitions. Each table also has a set of
44 properties. The following are some of the properties that are associ‐
45 ated with each table:
46
47 * type. Each table can have set, ordered_set, or bag semantics.
48 Notice that currently ordered_set is not supported for
49 disc_only_copies.
50
51 If a table is of type set, each key leads to either one or zero
52 records.
53
54 If a new item is inserted with the same key as an existing record,
55 the old record is overwritten. However, if a table is of type bag,
56 each key can map to several records. All records in type bag tables
57 are unique, only the keys can be duplicated.
58
59 * record_name. All records stored in a table must have the same name.
60 The records must be instances of the same record type.
61
62 * ram_copies. A table can be replicated on a number of Erlang nodes.
63 Property ram_copies specifies a list of Erlang nodes where RAM
64 copies are kept. These copies can be dumped to disc at regular
65 intervals. However, updates to these copies are not written to disc
66 on a transaction basis.
67
68 * disc_copies. This property specifies a list of Erlang nodes where
69 the table is kept in RAM and on disc. All updates of the table are
70 performed in the actual table and are also logged to disc. If a ta‐
71 ble is of type disc_copies at a certain node, the entire table is
72 resident in RAM memory and on disc. Each transaction performed on
73 the table is appended to a LOG file and written into the RAM table.
74
75 * disc_only_copies. Some, or all, table replicas can be kept on disc
76 only. These replicas are considerably slower than the RAM-based
77 replicas.
78
79 * index. This is a list of attribute names, or integers, which spec‐
80 ify the tuple positions on which Mnesia is to build and maintain an
81 extra index table.
82
83 * local_content. When an application requires tables whose contents
84 are local to each node, local_content tables can be used. The table
85 name is known to all Mnesia nodes, but its content is unique on
86 each node. This means that access to such a table must be done
87 locally. Set field local_content to true to enable the local_con‐
88 tent behavior. Default is false.
89
90 * majority. This attribute is true or false; default is false. When
91 true, a majority of the table replicas must be available for an
92 update to succeed. Majority checking can be enabled on tables with
93 mission-critical data, where it is vital to avoid inconsistencies
94 because of network splits.
95
96 * snmp. Each (set-based) Mnesia table can be automatically turned
97 into a Simple Network Management Protocol (SNMP) ordered table as
98 well. This property specifies the types of the SNMP keys.
99
100 * attributes. The names of the attributes for the records that are
101 inserted in the table.
102
103 For information about the complete set of table properties and their
104 details, see mnesia:create_table/2.
105
106 This Reference Manual uses a table of persons to illustrate various
107 examples. The following record definition is assumed:
108
109 -record(person, {name,
110 age = 0,
111 address = unknown,
112 salary = 0,
113 children = []}),
114
115 The first record attribute is the primary key, or key for short.
116
117 The function descriptions are sorted in alphabetical order. It is rec‐
118 ommended to start to read about mnesia:create_table/2, mnesia:lock/2,
119 and mnesia:activity/4 before you continue and learn about the rest.
120
121 Writing or deleting in transaction-context creates a local copy of each
122 modified record during the transaction. During iteration, that is, mne‐
123 sia:fold[lr]/4, mnesia:next/2, mnesia:prev/2, and mne‐
124 sia:snmp_get_next_index/2, Mnesia compensates for every written or
125 deleted record, which can reduce the performance.
126
127 If possible, avoid writing or deleting records in the same transaction
128 before iterating over the table.
129
131 abort(Reason) -> transaction abort
132
133 Makes the transaction silently return the tuple {aborted, Rea‐
134 son}. Termination of a Mnesia transaction means that an excep‐
135 tion is thrown to an enclosing catch. Thus, the expression catch
136 mnesia:abort(x) does not terminate the transaction.
137
138 activate_checkpoint(Args) -> {ok,Name,Nodes} | {error,Reason}
139
140 A checkpoint is a consistent view of the system. A checkpoint
141 can be activated on a set of tables. This checkpoint can then be
142 traversed and presents a view of the system as it existed at the
143 time when the checkpoint was activated, even if the tables are
144 being or have been manipulated.
145
146 Args is a list of the following tuples:
147
148 * {name,Name}. Name is the checkpoint name. Each checkpoint
149 must have a name that is unique to the associated nodes. The
150 name can be reused only once the checkpoint has been deacti‐
151 vated. By default, a name that is probably unique is gener‐
152 ated.
153
154 * {max,MaxTabs}. MaxTabs is a list of tables that are to be
155 included in the checkpoint. Default is []. For these tables,
156 the redundancy is maximized and checkpoint information is
157 retained together with all replicas. The checkpoint becomes
158 more fault tolerant if the tables have several replicas.
159 When a new replica is added by the schema manipulation func‐
160 tion mnesia:add_table_copy/3, a retainer is also attached
161 automatically.
162
163 * {min,MinTabs}. MinTabs is a list of tables that are to be
164 included in the checkpoint. Default is []. For these tables,
165 the redundancy is minimized and the checkpoint information
166 is only retained with one replica, preferably on the local
167 node.
168
169 * {allow_remote,Bool}. false means that all retainers must be
170 local. The checkpoint cannot be activated if a table does
171 not reside locally. true allows retainers to be allocated on
172 any node. Default is true.
173
174 * {ram_overrides_dump,Bool}. Only applicable for ram_copies.
175 Bool allows you to choose to back up the table state as it
176 is in RAM, or as it is on disc. true means that the latest
177 committed records in RAM are to be included in the check‐
178 point. These are the records that the application accesses.
179 false means that the records dumped to DAT files are to be
180 included in the checkpoint. These records are loaded at
181 startup. Default is false.
182
183 Returns {ok,Name,Nodes} or {error,Reason}. Name is the (possibly
184 generated) checkpoint name. Nodes are the nodes that are
185 involved in the checkpoint. Only nodes that keep a checkpoint
186 retainer know about the checkpoint.
187
188 activity(AccessContext, Fun [, Args]) -> ResultOfFun | exit(Reason)
189
190 Calls mnesia:activity(AccessContext, Fun, Args, AccessMod),
191 where AccessMod is the default access callback module obtained
192 by mnesia:system_info(access_module). Args defaults to [] (empty
193 list).
194
195 activity(AccessContext, Fun, Args, AccessMod) -> ResultOfFun |
196 exit(Reason)
197
198 Executes the functional object Fun with argument Args.
199
200 The code that executes inside the activity can consist of a
201 series of table manipulation functions, which are performed in
202 an AccessContext. Currently, the following access contexts are
203 supported:
204
205 transaction:
206 Short for {transaction, infinity}
207
208 {transaction, Retries}:
209 Calls mnesia:transaction(Fun, Args, Retries). Notice that
210 the result from Fun is returned if the transaction is suc‐
211 cessful (atomic), otherwise the function exits with an abort
212 reason.
213
214 sync_transaction:
215 Short for {sync_transaction, infinity}
216
217 {sync_transaction, Retries}:
218 Calls mnesia:sync_transaction(Fun, Args, Retries). Notice
219 that the result from Fun is returned if the transaction is
220 successful (atomic), otherwise the function exits with an
221 abort reason.
222
223 async_dirty:
224 Calls mnesia:async_dirty(Fun, Args).
225
226 sync_dirty:
227 Calls mnesia:sync_dirty(Fun, Args).
228
229 ets:
230 Calls mnesia:ets(Fun, Args).
231
232 This function (mnesia:activity/4) differs in an important way
233 from the functions mnesia:transaction, mnesia:sync_transaction,
234 mnesia:async_dirty, mnesia:sync_dirty, and mnesia:ets. Argument
235 AccessMod is the name of a callback module, which implements the
236 mnesia_access behavior.
237
238 Mnesia forwards calls to the following functions:
239
240 * mnesia:lock/2 (read_lock_table/1, write_lock_table/1)
241
242 * mnesia:write/3 (write/1, s_write/1)
243
244 * mnesia:delete/3 (delete/1, s_delete/1)
245
246 * mnesia:delete_object/3 (delete_object/1, s_delete_object/1)
247
248 * mnesia:read/3 (read/1, wread/1)
249
250 * mnesia:match_object/3 (match_object/1)
251
252 * mnesia:all_keys/1
253
254 * mnesia:first/1
255
256 * mnesia:last/1
257
258 * mnesia:prev/2
259
260 * mnesia:next/2
261
262 * mnesia:index_match_object/4 (index_match_object/2)
263
264 * mnesia:index_read/3
265
266 * mnesia:table_info/2
267
268 to the corresponding:
269
270 * AccessMod:lock(ActivityId, Opaque, LockItem, LockKind)
271
272 * AccessMod:write(ActivityId, Opaque, Tab, Rec, LockKind)
273
274 * AccessMod:delete(ActivityId, Opaque, Tab, Key, LockKind)
275
276 * AccessMod:delete_object(ActivityId, Opaque, Tab, RecXS,
277 LockKind)
278
279 * AccessMod:read(ActivityId, Opaque, Tab, Key, LockKind)
280
281 * AccessMod:match_object(ActivityId, Opaque, Tab, Pattern,
282 LockKind)
283
284 * AccessMod:all_keys(ActivityId, Opaque, Tab, LockKind)
285
286 * AccessMod:first(ActivityId, Opaque, Tab)
287
288 * AccessMod:last(ActivityId, Opaque, Tab)
289
290 * AccessMod:prev(ActivityId, Opaque, Tab, Key)
291
292 * AccessMod:next(ActivityId, Opaque, Tab, Key)
293
294 * AccessMod:index_match_object(ActivityId, Opaque, Tab, Pat‐
295 tern, Attr, LockKind)
296
297 * AccessMod:index_read(ActivityId, Opaque, Tab, SecondaryKey,
298 Attr, LockKind)
299
300 * AccessMod:table_info(ActivityId, Opaque, Tab, InfoItem)
301
302 ActivityId is a record that represents the identity of the
303 enclosing Mnesia activity. The first field (obtained with ele‐
304 ment(1, ActivityId)) contains an atom, which can be interpreted
305 as the activity type: ets, async_dirty, sync_dirty, or tid. tid
306 means that the activity is a transaction. The structure of the
307 rest of the identity record is internal to Mnesia.
308
309 Opaque is an opaque data structure that is internal to Mnesia.
310
311 add_table_copy(Tab, Node, Type) -> {aborted, R} | {atomic, ok}
312
313 Makes another copy of a table at the node Node. Argument Type
314 must be either of the atoms ram_copies, disc_copies, or
315 disc_only_copies. For example, the following call ensures that a
316 disc replica of the person table also exists at node Node:
317
318 mnesia:add_table_copy(person, Node, disc_copies)
319
320 This function can also be used to add a replica of the table
321 named schema.
322
323 add_table_index(Tab, AttrName) -> {aborted, R} | {atomic, ok}
324
325 Table indexes can be used whenever the user wants to use fre‐
326 quently some other field than the key field to look up records.
327 If this other field has an associated index, these lookups can
328 occur in constant time and space. For example, if your applica‐
329 tion wishes to use field age to find efficiently all persons
330 with a specific age, it can be a good idea to have an index on
331 field age. This can be done with the following call:
332
333 mnesia:add_table_index(person, age)
334
335 Indexes do not come for free. They occupy space that is propor‐
336 tional to the table size, and they cause insertions into the ta‐
337 ble to execute slightly slower.
338
339 all_keys(Tab) -> KeyList | transaction abort
340
341 Returns a list of all keys in the table named Tab. The semantics
342 of this function is context-sensitive. For more information, see
343 mnesia:activity/4. In transaction-context, it acquires a read
344 lock on the entire table.
345
346 async_dirty(Fun, [, Args]) -> ResultOfFun | exit(Reason)
347
348 Calls the Fun in a context that is not protected by a transac‐
349 tion. The Mnesia function calls performed in the Fun are mapped
350 to the corresponding dirty functions. This still involves log‐
351 ging, replication, and subscriptions, but there is no locking,
352 local transaction storage, or commit protocols involved. Check‐
353 point retainers and indexes are updated, but they are updated
354 dirty. As for normal mnesia:dirty_* operations, the operations
355 are performed semi-asynchronously. For details, see mne‐
356 sia:activity/4 and the User's Guide.
357
358 The Mnesia tables can be manipulated without using transactions.
359 This has some serious disadvantages, but is considerably faster,
360 as the transaction manager is not involved and no locks are set.
361 A dirty operation does, however, guarantee a certain level of
362 consistency, and the dirty operations cannot return garbled
363 records. All dirty operations provide location transparency to
364 the programmer, and a program does not have to be aware of the
365 whereabouts of a certain table to function.
366
367 Notice that it is more than ten times more efficient to read
368 records dirty than within a transaction.
369
370 Depending on the application, it can be a good idea to use the
371 dirty functions for certain operations. Almost all Mnesia func‐
372 tions that can be called within transactions have a dirty equiv‐
373 alent, which is much more efficient.
374
375 However, notice that there is a risk that the database can be
376 left in an inconsistent state if dirty operations are used to
377 update it. Dirty operations are only to be used for performance
378 reasons when it is absolutely necessary.
379
380 Notice that calling (nesting) mnesia:[a]sync_dirty inside a
381 transaction-context inherits the transaction semantics.
382
383 backup(Opaque [, BackupMod]) -> ok | {error,Reason}
384
385 Activates a new checkpoint covering all Mnesia tables, including
386 the schema, with maximum degree of redundancy, and performs a
387 backup using backup_checkpoint/2/3. The default value of the
388 backup callback module BackupMod is obtained by mnesia:sys‐
389 tem_info(backup_module).
390
391 backup_checkpoint(Name, Opaque [, BackupMod]) -> ok | {error,Reason}
392
393 The tables are backed up to external media using backup module
394 BackupMod. Tables with the local contents property are backed up
395 as they exist on the current node. BackupMod is the default
396 backup callback module obtained by mnesia:sys‐
397 tem_info(backup_module). For information about the exact call‐
398 back interface (the mnesia_backup behavior), see the User's
399 Guide.
400
401 change_config(Config, Value) -> {error, Reason} | {ok, ReturnValue}
402
403 Config is to be an atom of the following configuration parame‐
404 ters:
405
406 extra_db_nodes:
407 Value is a list of nodes that Mnesia is to try to connect
408 to. ReturnValue is those nodes in Value that Mnesia is con‐
409 nected to.
410
411 Notice that this function must only be used to connect to
412 newly started RAM nodes (N.D.R.S.N.) with an empty schema.
413 If, for example, this function is used after the network has
414 been partitioned, it can lead to inconsistent tables.
415
416 Notice that Mnesia can be connected to other nodes than
417 those returned in ReturnValue.
418
419 dc_dump_limit:
420 Value is a number. See the description in Section Configura‐
421 tion Parameters. ReturnValue is the new value. Notice that
422 this configuration parameter is not persistent. It is lost
423 when Mnesia has stopped.
424
425 change_table_access_mode(Tab, AccessMode) -> {aborted, R} | {atomic,
426 ok}
427
428 AcccessMode is by default the atom read_write but it can also be
429 set to the atom read_only. If AccessMode is set to read_only,
430 updates to the table cannot be performed. At startup, Mnesia
431 always loads read_only tables locally regardless of when and if
432 Mnesia is terminated on other nodes.
433
434 change_table_copy_type(Tab, Node, To) -> {aborted, R} | {atomic, ok}
435
436 For example:
437
438 mnesia:change_table_copy_type(person, node(), disc_copies)
439
440 Transforms the person table from a RAM table into a disc-based
441 table at Node.
442
443 This function can also be used to change the storage type of the
444 table named schema. The schema table can only have ram_copies or
445 disc_copies as the storage type. If the storage type of the
446 schema is ram_copies, no other table can be disc-resident on
447 that node.
448
449 change_table_load_order(Tab, LoadOrder) -> {aborted, R} | {atomic, ok}
450
451 The LoadOrder priority is by default 0 (zero) but can be set to
452 any integer. The tables with the highest LoadOrder priority are
453 loaded first at startup.
454
455 change_table_majority(Tab, Majority) -> {aborted, R} | {atomic, ok}
456
457 Majority must be a boolean. Default is false. When true, a
458 majority of the table replicas must be available for an update
459 to succeed. When used on fragmented tables, Tab must be the base
460 table name. Directly changing the majority setting on individual
461 fragments is not allowed.
462
463 clear_table(Tab) -> {aborted, R} | {atomic, ok}
464
465 Deletes all entries in the table Tab.
466
467 create_schema(DiscNodes) -> ok | {error,Reason}
468
469 Creates a new database on disc. Various files are created in the
470 local Mnesia directory of each node. Notice that the directory
471 must be unique for each node. Two nodes must never share the
472 same directory. If possible, use a local disc device to improve
473 performance.
474
475 mnesia:create_schema/1 fails if any of the Erlang nodes given as
476 DiscNodes are not alive, if Mnesia is running on any of the
477 nodes, or if any of the nodes already have a schema. Use mne‐
478 sia:delete_schema/1 to get rid of old faulty schemas.
479
480 Notice that only nodes with disc are to be included in DiscN‐
481 odes. Disc-less nodes, that is, nodes where all tables including
482 the schema only resides in RAM, must not be included.
483
484 create_table(Name, TabDef) -> {atomic, ok} | {aborted, Reason}
485
486 Creates a Mnesia table called Name according to argument TabDef.
487 This list must be a list of {Item, Value} tuples, where the fol‐
488 lowing values are allowed:
489
490 * {access_mode, Atom}. The access mode is by default the atom
491 read_write but it can also be set to the atom read_only. If
492 AccessMode is set to read_only, updates to the table cannot
493 be performed.
494
495 At startup, Mnesia always loads read_only table locally
496 regardless of when and if Mnesia is terminated on other
497 nodes. This argument returns the access mode of the table.
498 The access mode can be read_only or read_write.
499
500 * {attributes, AtomList} is a list of the attribute names for
501 the records that are supposed to populate the table. Default
502 is [key, val]. The table must at least have one extra
503 attribute in addition to the key.
504
505 When accessing single attributes in a record, it is not nec‐
506 essary, or even recommended, to hard code any attribute
507 names as atoms. Use construct record_info(fields, Record‐
508 Name) instead. It can be used for records of type Record‐
509 Name.
510
511 * {disc_copies, Nodelist}, where Nodelist is a list of the
512 nodes where this table is supposed to have disc copies. If a
513 table replica is of type disc_copies, all write operations
514 on this particular replica of the table are written to disc
515 and to the RAM copy of the table.
516
517 It is possible to have a replicated table of type
518 disc_copies on one node and another type on another node.
519 Default is [].
520
521 * {disc_only_copies, Nodelist}, where Nodelist is a list of
522 the nodes where this table is supposed to have
523 disc_only_copies. A disc only table replica is kept on disc
524 only and unlike the other replica types, the contents of the
525 replica do not reside in RAM. These replicas are consider‐
526 ably slower than replicas held in RAM.
527
528 * {index, Intlist}, where Intlist is a list of attribute names
529 (atoms) or record fields for which Mnesia is to build and
530 maintain an extra index table. The qlc query compiler may be
531 able to optimize queries if there are indexes available.
532
533 * {load_order, Integer}. The load order priority is by default
534 0 (zero) but can be set to any integer. The tables with the
535 highest load order priority are loaded first at startup.
536
537 * {majority, Flag}, where Flag must be a boolean. If true, any
538 (non-dirty) update to the table is aborted, unless a major‐
539 ity of the table replicas are available for the commit. When
540 used on a fragmented table, all fragments are given the same
541 the same majority setting.
542
543 * {ram_copies, Nodelist}, where Nodelist is a list of the
544 nodes where this table is supposed to have RAM copies. A ta‐
545 ble replica of type ram_copies is not written to disc on a
546 per transaction basis. ram_copies replicas can be dumped to
547 disc with the function mnesia:dump_tables(Tabs). Default
548 value for this attribute is [node()].
549
550 * {record_name, Name}, where Name must be an atom. All records
551 stored in the table must have this name as the first ele‐
552 ment. It defaults to the same name as the table name.
553
554 * {snmp, SnmpStruct}. For a description of SnmpStruct, see
555 mnesia:snmp_open_table/2. If this attribute is present in
556 ArgList to mnesia:create_table/2, the table is immediately
557 accessible by SNMP. Therefore applications that use SNMP to
558 manipulate and control the system can be designed easily,
559 since Mnesia provides a direct mapping between the logical
560 tables that make up an SNMP control application and the
561 physical data that makes up a Mnesia table.
562
563 * {storage_properties, [{Backend, Properties}] forwards more
564 properties to the back end storage. Backend can currently be
565 ets or dets. Properties is a list of options sent to the
566 back end storage during table creation. Properties cannot
567 contain properties already used by Mnesia, such as type or
568 named_table.
569
570 For example:
571
572 mnesia:create_table(table, [{ram_copies, [node()]}, {disc_only_copies, nodes()},
573 {storage_properties,
574 [{ets, [compressed]}, {dets, [{auto_save, 5000}]} ]}])
575
576 * {type, Type}, where Type must be either of the atoms set,
577 ordered_set, or bag. Default is set. In a set, all records
578 have unique keys. In a bag, several records can have the
579 same key, but the record content is unique. If a non-unique
580 record is stored, the old conflicting records are overwrit‐
581 ten.
582
583 Notice that currently ordered_set is not supported for
584 disc_only_copies.
585
586 * {local_content, Bool}, where Bool is true or false. Default
587 is false.
588
589 For example, the following call creates the person table
590 (defined earlier) and replicates it on two nodes:
591
592 mnesia:create_table(person,
593 [{ram_copies, [N1, N2]},
594 {attributes, record_info(fields, person)}]).
595
596 If it is required that Mnesia must build and maintain an extra
597 index table on attribute address of all the person records that
598 are inserted in the table, the following code would be issued:
599
600 mnesia:create_table(person,
601 [{ram_copies, [N1, N2]},
602 {index, [address]},
603 {attributes, record_info(fields, person)}]).
604
605
606 The specification of index and attributes can be hard-coded as
607 {index, [2]} and {attributes, [name, age, address, salary, chil‐
608 dren]}, respectively.
609
610 mnesia:create_table/2 writes records into the table schema. This
611 function, and all other schema manipulation functions, are
612 implemented with the normal transaction management system. This
613 guarantees that schema updates are performed on all nodes in an
614 atomic manner.
615
616 deactivate_checkpoint(Name) -> ok | {error, Reason}
617
618 The checkpoint is automatically deactivated when some of the
619 tables involved have no retainer attached to them. This can
620 occur when nodes go down or when a replica is deleted. Check‐
621 points are also deactivated with this function. Name is the name
622 of an active checkpoint.
623
624 del_table_copy(Tab, Node) -> {aborted, R} | {atomic, ok}
625
626 Deletes the replica of table Tab at node Node. When the last
627 replica is deleted with this function, the table disappears
628 entirely.
629
630 This function can also be used to delete a replica of the table
631 named schema. The Mnesia node is then removed. Notice that Mne‐
632 sia must be stopped on the node first.
633
634 del_table_index(Tab, AttrName) -> {aborted, R} | {atomic, ok}
635
636 Deletes the index on attribute with name AttrName in a table.
637
638 delete({Tab, Key}) -> transaction abort | ok
639
640 Calls mnesia:delete(Tab, Key, write).
641
642 delete(Tab, Key, LockKind) -> transaction abort | ok
643
644 Deletes all records in table Tab with the key Key.
645
646 The semantics of this function is context-sensitive. For
647 details, see mnesia:activity/4. In transaction-context, it
648 acquires a lock of type LockKind in the record. Currently, the
649 lock types write and sticky_write are supported.
650
651 delete_object(Record) -> transaction abort | ok
652
653 Calls mnesia:delete_object(Tab, Record, write), where Tab is
654 element(1, Record).
655
656 delete_object(Tab, Record, LockKind) -> transaction abort | ok
657
658 If a table is of type bag, it can sometimes be needed to delete
659 only some of the records with a certain key. This can be done
660 with the function delete_object/3. A complete record must be
661 supplied to this function.
662
663 The semantics of this function is context-sensitive. For
664 details, see mnesia:activity/4. In transaction-context, it
665 acquires a lock of type LockKind on the record. Currently, the
666 lock types write and sticky_write are supported.
667
668 delete_schema(DiscNodes) -> ok | {error,Reason}
669
670 Deletes a database created with mnesia:create_schema/1. mne‐
671 sia:delete_schema/1 fails if any of the Erlang nodes given as
672 DiscNodes are not alive, or if Mnesia is running on any of the
673 nodes.
674
675 After the database is deleted, it can still be possible to start
676 Mnesia as a disc-less node. This depends on how configuration
677 parameter schema_location is set.
678
679 Warning:
680 Use this function with extreme caution, as it makes existing
681 persistent data obsolete. Think twice before using it.
682
683
684 delete_table(Tab) -> {aborted, Reason} | {atomic, ok}
685
686 Permanently deletes all replicas of table Tab.
687
688 dirty_all_keys(Tab) -> KeyList | exit({aborted, Reason})
689
690 Dirty equivalent of the function mnesia:all_keys/1.
691
692 dirty_delete({Tab, Key}) -> ok | exit({aborted, Reason})
693
694 Calls mnesia:dirty_delete(Tab, Key).
695
696 dirty_delete(Tab, Key) -> ok | exit({aborted, Reason})
697
698 Dirty equivalent of the function mnesia:delete/3.
699
700 dirty_delete_object(Record)
701
702 Calls mnesia:dirty_delete_object(Tab, Record), where Tab is ele‐
703 ment(1, Record).
704
705 dirty_delete_object(Tab, Record)
706
707 Dirty equivalent of the function mnesia:delete_object/3.
708
709 dirty_first(Tab) -> Key | exit({aborted, Reason})
710
711 Records in set or bag tables are not ordered. However, there is
712 an ordering of the records that is unknown to the user. There‐
713 fore, a table can be traversed by this function with the func‐
714 tion mnesia:dirty_next/2.
715
716 If there are no records in the table, this function returns the
717 atom '$end_of_table'. It is therefore highly undesirable, but
718 not disallowed, to use this atom as the key for any user
719 records.
720
721 dirty_index_match_object(Pattern, Pos)
722
723 Starts mnesia:dirty_index_match_object(Tab, Pattern, Pos), where
724 Tab is element(1, Pattern).
725
726 dirty_index_match_object(Tab, Pattern, Pos)
727
728 Dirty equivalent of the function mnesia:index_match_object/4.
729
730 dirty_index_read(Tab, SecondaryKey, Pos)
731
732 Dirty equivalent of the function mnesia:index_read/3.
733
734 dirty_last(Tab) -> Key | exit({aborted, Reason})
735
736 Works exactly like mnesia:dirty_first/1 but returns the last
737 object in Erlang term order for the ordered_set table type. For
738 all other table types, mnesia:dirty_first/1 and mne‐
739 sia:dirty_last/1 are synonyms.
740
741 dirty_match_object(Pattern) -> RecordList | exit({aborted, Reason})
742
743 Calls mnesia:dirty_match_object(Tab, Pattern), where Tab is ele‐
744 ment(1, Pattern).
745
746 dirty_match_object(Tab, Pattern) -> RecordList | exit({aborted, Rea‐
747 son})
748
749 Dirty equivalent of the function mnesia:match_object/3.
750
751 dirty_next(Tab, Key) -> Key | exit({aborted, Reason})
752
753 Traverses a table and performs operations on all records in the
754 table. When the end of the table is reached, the special key
755 '$end_of_table' is returned. Otherwise, the function returns a
756 key that can be used to read the actual record. The behavior is
757 undefined if another Erlang process performs write operations on
758 the table while it is being traversed with the function mne‐
759 sia:dirty_next/2.
760
761 dirty_prev(Tab, Key) -> Key | exit({aborted, Reason})
762
763 Works exactly like mnesia:dirty_next/2 but returns the previous
764 object in Erlang term order for the ordered_set table type. For
765 all other table types, mnesia:dirty_next/2 and mne‐
766 sia:dirty_prev/2 are synonyms.
767
768 dirty_read({Tab, Key}) -> ValueList | exit({aborted, Reason}
769
770 Calls mnesia:dirty_read(Tab, Key).
771
772 dirty_read(Tab, Key) -> ValueList | exit({aborted, Reason}
773
774 Dirty equivalent of the function mnesia:read/3.
775
776 dirty_select(Tab, MatchSpec) -> ValueList | exit({aborted, Reason}
777
778 Dirty equivalent of the function mnesia:select/2.
779
780 dirty_slot(Tab, Slot) -> RecordList | exit({aborted, Reason})
781
782 Traverses a table in a manner similar to the function mne‐
783 sia:dirty_next/2. A table has a number of slots that range from
784 0 (zero) to an unknown upper bound. The function mne‐
785 sia:dirty_slot/2 returns the special atom '$end_of_table' when
786 the end of the table is reached. The behavior of this function
787 is undefined if a write operation is performed on the table
788 while it is being traversed.
789
790 dirty_update_counter({Tab, Key}, Incr) -> NewVal | exit({aborted, Rea‐
791 son})
792
793 Calls mnesia:dirty_update_counter(Tab, Key, Incr).
794
795 dirty_update_counter(Tab, Key, Incr) -> NewVal | exit({aborted, Rea‐
796 son})
797
798 Mnesia has no special counter records. However, records of the
799 form {Tab, Key, Integer} can be used as (possibly disc-resident)
800 counters when Tab is a set. This function updates a counter with
801 a positive or negative number. However, counters can never
802 become less than zero. There are two significant differences
803 between this function and the action of first reading the
804 record, performing the arithmetics, and then writing the record:
805
806 * It is much more efficient.
807
808 * mnesia:dirty_update_counter/3 is performed as an atomic
809 operation although it is not protected by a transaction.
810
811 If two processes perform mnesia:dirty_update_counter/3 simulta‐
812 neously, both updates take effect without the risk of losing one
813 of the updates. The new value NewVal of the counter is returned.
814
815 If Key do not exists, a new record is created with value Incr if
816 it is larger than 0, otherwise it is set to 0.
817
818 dirty_write(Record) -> ok | exit({aborted, Reason})
819
820 Calls mnesia:dirty_write(Tab, Record), where Tab is element(1,
821 Record).
822
823 dirty_write(Tab, Record) -> ok | exit({aborted, Reason})
824
825 Dirty equivalent of the function mnesia:write/3.
826
827 dump_log() -> dumped
828
829 Performs a user-initiated dump of the local log file. This is
830 usually not necessary, as Mnesia by default manages this auto‐
831 matically. See configuration parameters dump_log_time_threshold
832 and dump_log_write_threshold.
833
834 dump_tables(TabList) -> {atomic, ok} | {aborted, Reason}
835
836 Dumps a set of ram_copies tables to disc. The next time the sys‐
837 tem is started, these tables are initiated with the data found
838 in the files that are the result of this dump. None of the
839 tables can have disc-resident replicas.
840
841 dump_to_textfile(Filename)
842
843 Dumps all local tables of a Mnesia system into a text file,
844 which can be edited (by a normal text editor) and then be
845 reloaded with mnesia:load_textfile/1. Only use this function for
846 educational purposes. Use other functions to deal with real
847 backups.
848
849 error_description(Error) -> String
850
851 All Mnesia transactions, including all the schema update func‐
852 tions, either return value {atomic, Val} or the tuple {aborted,
853 Reason}. Reason can be either of the atoms in the following
854 list. The function error_description/1 returns a descriptive
855 string that describes the error.
856
857 * nested_transaction. Nested transactions are not allowed in
858 this context.
859
860 * badarg. Bad or invalid argument, possibly bad type.
861
862 * no_transaction. Operation not allowed outside transactions.
863
864 * combine_error. Table options illegally combined.
865
866 * bad_index. Index already exists, or was out of bounds.
867
868 * already_exists. Schema option to be activated is already on.
869
870 * index_exists. Some operations cannot be performed on tables
871 with an index.
872
873 * no_exists. Tried to perform operation on non-existing (not-
874 alive) item.
875
876 * system_limit. A system limit was exhausted.
877
878 * mnesia_down. A transaction involves records on a remote
879 node, which became unavailable before the transaction was
880 completed. Records are no longer available elsewhere in the
881 network.
882
883 * not_a_db_node. A node was mentioned that does not exist in
884 the schema.
885
886 * bad_type. Bad type specified in argument.
887
888 * node_not_running. Node is not running.
889
890 * truncated_binary_file. Truncated binary in file.
891
892 * active. Some delete operations require that all active
893 records are removed.
894
895 * illegal. Operation not supported on this record.
896
897 Error can be Reason, {error, Reason}, or {aborted, Reason}. Rea‐
898 son can be an atom or a tuple with Reason as an atom in the
899 first field.
900
901 The following examples illustrate a function that returns an
902 error, and the method to retrieve more detailed error informa‐
903 tion:
904
905 * The function mnesia:create_table(bar, [{attributes, 3.14}])
906 returns the tuple {aborted,Reason}, where Reason is the
907 tuple {bad_type,bar,3.14000}.
908
909 * The function mnesia:error_description(Reason) returns the
910 term {"Bad type on some provided arguments",bar,3.14000},
911 which is an error description suitable for display.
912
913 ets(Fun, [, Args]) -> ResultOfFun | exit(Reason)
914
915 Calls the Fun in a raw context that is not protected by a trans‐
916 action. The Mnesia function call is performed in the Fun and
917 performed directly on the local ETS tables on the assumption
918 that the local storage type is ram_copies and the tables are not
919 replicated to other nodes. Subscriptions are not triggered and
920 checkpoints are not updated, but it is extremely fast. This
921 function can also be applied to disc_copies tables if all opera‐
922 tions are read only. For details, see mnesia:activity/4 and the
923 User's Guide.
924
925 Notice that calling (nesting) a mnesia:ets inside a transaction-
926 context inherits the transaction semantics.
927
928 first(Tab) -> Key | transaction abort
929
930 Records in set or bag tables are not ordered. However, there is
931 an ordering of the records that is unknown to the user. A table
932 can therefore be traversed by this function with the function
933 mnesia:next/2.
934
935 If there are no records in the table, this function returns the
936 atom '$end_of_table'. It is therefore highly undesirable, but
937 not disallowed, to use this atom as the key for any user
938 records.
939
940 foldl(Function, Acc, Table) -> NewAcc | transaction abort
941
942 Iterates over the table Table and calls Function(Record, NewAcc)
943 for each Record in the table. The term returned from Function is
944 used as the second argument in the next call to Function.
945
946 foldl returns the same term as the last call to Function
947 returned.
948
949 foldr(Function, Acc, Table) -> NewAcc | transaction abort
950
951 Works exactly like foldl/3 but iterates the table in the oppo‐
952 site order for the ordered_set table type. For all other table
953 types, foldr/3 and foldl/3 are synonyms.
954
955 force_load_table(Tab) -> yes | ErrorDescription
956
957 The Mnesia algorithm for table load can lead to a situation
958 where a table cannot be loaded. This situation occurs when a
959 node is started and Mnesia concludes, or suspects, that another
960 copy of the table was active after this local copy became inac‐
961 tive because of a system crash.
962
963 If this situation is not acceptable, this function can be used
964 to override the strategy of the Mnesia table load algorithm.
965 This can lead to a situation where some transaction effects are
966 lost with an inconsistent database as result, but for some
967 applications high availability is more important than consistent
968 data.
969
970 index_match_object(Pattern, Pos) -> transaction abort | ObjList
971
972 Starts mnesia:index_match_object(Tab, Pattern, Pos, read), where
973 Tab is element(1, Pattern).
974
975 index_match_object(Tab, Pattern, Pos, LockKind) -> transaction abort |
976 ObjList
977
978 In a manner similar to the function mnesia:index_read/3, any
979 index information can be used when trying to match records. This
980 function takes a pattern that obeys the same rules as the func‐
981 tion mnesia:match_object/3, except that this function requires
982 the following conditions:
983
984 * The table Tab must have an index on position Pos.
985
986 * The element in position Pos in Pattern must be bound. Pos is
987 an integer (#record.Field) or an attribute name.
988
989 The two index search functions described here are automatically
990 started when searching tables with qlc list comprehensions and
991 also when using the low-level mnesia:[dirty_]match_object func‐
992 tions.
993
994 The semantics of this function is context-sensitive. For
995 details, see mnesia:activity/4. In transaction-context, it
996 acquires a lock of type LockKind on the entire table or on a
997 single record. Currently, the lock type read is supported.
998
999 index_read(Tab, SecondaryKey, Pos) -> transaction abort | RecordList
1000
1001 Assume that there is an index on position Pos for a certain
1002 record type. This function can be used to read the records with‐
1003 out knowing the actual key for the record. For example, with an
1004 index in position 1 of table person, the call mne‐
1005 sia:index_read(person, 36, #person.age) returns a list of all
1006 persons with age 36. Pos can also be an attribute name (atom),
1007 but if the notation mnesia:index_read(person, 36, age) is used,
1008 the field position is searched for in runtime, for each call.
1009
1010 The semantics of this function is context-sensitive. For
1011 details, see mnesia:activity/4. In transaction-context, it
1012 acquires a read lock on the entire table.
1013
1014 info() -> ok
1015
1016 Prints system information on the terminal. This function can be
1017 used even if Mnesia is not started. However, more information is
1018 displayed if Mnesia is started.
1019
1020 install_fallback(Opaque) -> ok | {error,Reason}
1021
1022 Calls mnesia:install_fallback(Opaque, Args), where Args is
1023 [{scope, global}].
1024
1025 install_fallback(Opaque), BackupMod) -> ok | {error,Reason}
1026
1027 Calls mnesia:install_fallback(Opaque, Args), where Args is
1028 [{scope, global}, {module, BackupMod}].
1029
1030 install_fallback(Opaque, Args) -> ok | {error,Reason}
1031
1032 Installs a backup as fallback. The fallback is used to restore
1033 the database at the next startup. Installation of fallbacks
1034 requires Erlang to be operational on all the involved nodes, but
1035 it does not matter if Mnesia is running or not. The installation
1036 of the fallback fails if the local node is not one of the disc-
1037 resident nodes in the backup.
1038
1039 Args is a list of the following tuples:
1040
1041 * {module, BackupMod}. All accesses of the backup media are
1042 performed through a callback module named BackupMod. Argu‐
1043 ment Opaque is forwarded to the callback module, which can
1044 interpret it as it wishes. The default callback module is
1045 called mnesia_backup and it interprets argument Opaque as a
1046 local filename. The default for this module is also config‐
1047 urable through configuration parameter -mnesia mne‐
1048 sia_backup.
1049
1050 * {scope, Scope}. The Scope of a fallback is either global for
1051 the entire database or local for one node. By default, the
1052 installation of a fallback is a global operation, which
1053 either is performed on all nodes with a disc-resident schema
1054 or none. Which nodes that are disc-resident is determined
1055 from the schema information in the backup.
1056
1057 If Scope of the operation is local, the fallback is only
1058 installed on the local node.
1059
1060 * {mnesia_dir, AlternateDir}. This argument is only valid if
1061 the scope of the installation is local. Normally the instal‐
1062 lation of a fallback is targeted to the Mnesia directory, as
1063 configured with configuration parameter -mnesia dir. But by
1064 explicitly supplying an AlternateDir, the fallback is
1065 installed there regardless of the Mnesia directory configu‐
1066 ration parameter setting. After installation of a fallback
1067 on an alternative Mnesia directory, that directory is fully
1068 prepared for use as an active Mnesia directory.
1069
1070 This is a dangerous feature that must be used with care. By
1071 unintentional mixing of directories, you can easily end up
1072 with an inconsistent database, if the same backup is
1073 installed on more than one directory.
1074
1075 is_transaction() -> boolean
1076
1077 When this function is executed inside a transaction-context, it
1078 returns true, otherwise false.
1079
1080 last(Tab) -> Key | transaction abort
1081
1082 Works exactly like mnesia:first/1, but returns the last object
1083 in Erlang term order for the ordered_set table type. For all
1084 other table types, mnesia:first/1 and mnesia:last/1 are syn‐
1085 onyms.
1086
1087 load_textfile(Filename)
1088
1089 Loads a series of definitions and data found in the text file
1090 (generated with mnesia:dump_to_textfile/1) into Mnesia. This
1091 function also starts Mnesia and possibly creates a new schema.
1092 This function is intended for educational purposes only. It is
1093 recommended to use other functions to deal with real backups.
1094
1095 lock(LockItem, LockKind) -> Nodes | ok | transaction abort
1096
1097 Write locks are normally acquired on all nodes where a replica
1098 of the table resides (and is active). Read locks are acquired on
1099 one node (the local node if a local replica exists). Most of the
1100 context-sensitive access functions acquire an implicit lock if
1101 they are started in a transaction-context. The granularity of a
1102 lock can either be a single record or an entire table.
1103
1104 The normal use is to call the function without checking the
1105 return value, as it exits if it fails and the transaction is
1106 restarted by the transaction manager. It returns all the locked
1107 nodes if a write lock is acquired and ok if it was a read lock.
1108
1109 The function mnesia:lock/2 is intended to support explicit lock‐
1110 ing on tables, but is also intended for situations when locks
1111 need to be acquired regardless of how tables are replicated.
1112 Currently, two kinds of LockKind are supported:
1113
1114 write:
1115 Write locks are exclusive. This means that if one transac‐
1116 tion manages to acquire a write lock on an item, no other
1117 transaction can acquire any kind of lock on the same item.
1118
1119 read:
1120 Read locks can be shared. This means that if one transaction
1121 manages to acquire a read lock on an item, other transac‐
1122 tions can also acquire a read lock on the same item. How‐
1123 ever, if someone has a read lock, no one can acquire a write
1124 lock at the same item. If someone has a write lock, no one
1125 can acquire either a read lock or a write lock at the same
1126 item.
1127
1128 Conflicting lock requests are automatically queued if there is
1129 no risk of a deadlock. Otherwise the transaction must be termi‐
1130 nated and executed again. Mnesia does this automatically as long
1131 as the upper limit of the maximum retries is not reached. For
1132 details, see mnesia:transaction/3.
1133
1134 For the sake of completeness, sticky write locks are also
1135 described here even if a sticky write lock is not supported by
1136 this function:
1137
1138 sticky_write:
1139 Sticky write locks are a mechanism that can be used to opti‐
1140 mize write lock acquisition. If your application uses repli‐
1141 cated tables mainly for fault tolerance (as opposed to read
1142 access optimization purpose), sticky locks can be the best
1143 option available.
1144
1145 When a sticky write lock is acquired, all nodes are informed
1146 which node is locked. Then, sticky lock requests from the
1147 same node are performed as a local operation without any
1148 communication with other nodes. The sticky lock lingers on
1149 the node even after the transaction ends. For details, see
1150 the User's Guide.
1151
1152 Currently, this function supports two kinds of LockItem:
1153
1154 {table, Tab}:
1155 This acquires a lock of type LockKind on the entire table
1156 Tab.
1157
1158 {global, GlobalKey, Nodes}:
1159 This acquires a lock of type LockKind on the global resource
1160 GlobalKey. The lock is acquired on all active nodes in the
1161 Nodes list.
1162
1163 Locks are released when the outermost transaction ends.
1164
1165 The semantics of this function is context-sensitive. For
1166 details, see mnesia:activity/4. In transaction-context, it
1167 acquires locks, otherwise it ignores the request.
1168
1169 match_object(Pattern) -> transaction abort | RecList
1170
1171 Calls mnesia:match_object(Tab, Pattern, read), where Tab is ele‐
1172 ment(1, Pattern).
1173
1174 match_object(Tab, Pattern, LockKind) -> transaction abort | RecList
1175
1176 Takes a pattern with "don't care" variables denoted as a '_'
1177 parameter. This function returns a list of records that matched
1178 the pattern. Since the second element of a record in a table is
1179 considered to be the key for the record, the performance of this
1180 function depends on whether this key is bound or not.
1181
1182 For example, the call mnesia:match_object(person, {person, '_',
1183 36, '_', '_'}, read) returns a list of all person records with
1184 an age field of 36.
1185
1186 The function mnesia:match_object/3 automatically uses indexes if
1187 these exist. However, no heuristics are performed to select the
1188 best index.
1189
1190 The semantics of this function is context-sensitive. For
1191 details, see mnesia:activity/4. In transaction-context, it
1192 acquires a lock of type LockKind on the entire table or a single
1193 record. Currently, the lock type read is supported.
1194
1195 move_table_copy(Tab, From, To) -> {aborted, Reason} | {atomic, ok}
1196
1197 Moves the copy of table Tab from node From to node To.
1198
1199 The storage type is preserved. For example, a RAM table moved
1200 from one node remains a RAM on the new node. Other transactions
1201 can still read and write in the table while it is being moved.
1202
1203 This function cannot be used on local_content tables.
1204
1205 next(Tab, Key) -> Key | transaction abort
1206
1207 Traverses a table and performs operations on all records in the
1208 table. When the end of the table is reached, the special key
1209 '$end_of_table' is returned. Otherwise the function returns a
1210 key that can be used to read the actual record.
1211
1212 prev(Tab, Key) -> Key | transaction abort
1213
1214 Works exactly like mnesia:next/2, but returns the previous
1215 object in Erlang term order for the ordered_set table type. For
1216 all other table types, mnesia:next/2 and mnesia:prev/2 are syn‐
1217 onyms.
1218
1219 read({Tab, Key}) -> transaction abort | RecordList
1220
1221 Calls function mnesia:read(Tab, Key, read).
1222
1223 read(Tab, Key) -> transaction abort | RecordList
1224
1225 Calls function mnesia:read(Tab, Key, read).
1226
1227 read(Tab, Key, LockKind) -> transaction abort | RecordList
1228
1229 Reads all records from table Tab with key Key. This function has
1230 the same semantics regardless of the location of Tab. If the ta‐
1231 ble is of type bag, the function mnesia:read(Tab, Key) can
1232 return an arbitrarily long list. If the table is of type set,
1233 the list is either of length 1, or [].
1234
1235 The semantics of this function is context-sensitive. For
1236 details, see mnesia:activity/4. In transaction-context, it
1237 acquires a lock of type LockKind. Currently, the lock types
1238 read, write, and sticky_write are supported.
1239
1240 If the user wants to update the record, it is more efficient to
1241 use write/sticky_write as the LockKind. If majority checking is
1242 active on the table, it is checked as soon as a write lock is
1243 attempted. This can be used to end quickly if the majority con‐
1244 dition is not met.
1245
1246 read_lock_table(Tab) -> ok | transaction abort
1247
1248 Calls the function mnesia:lock({table, Tab}, read).
1249
1250 report_event(Event) -> ok
1251
1252 When tracing a system of Mnesia applications it is useful to be
1253 able to interleave Mnesia own events with application-related
1254 events that give information about the application context.
1255
1256 Whenever the application begins a new and demanding Mnesia task,
1257 or if it enters a new interesting phase in its execution, it can
1258 be a good idea to use mnesia:report_event/1. Event can be any
1259 term and generates a {mnesia_user, Event} event for any pro‐
1260 cesses that subscribe to Mnesia system events.
1261
1262 restore(Opaque, Args) -> {atomic, RestoredTabs} |{aborted, Reason}
1263
1264 With this function, tables can be restored online from a backup
1265 without restarting Mnesia. Opaque is forwarded to the backup
1266 module. Args is a list of the following tuples:
1267
1268 * {module,BackupMod}. The backup module BackupMod is used to
1269 access the backup media. If omitted, the default backup mod‐
1270 ule is used.
1271
1272 * {skip_tables, TabList}, where TabList is a list of tables
1273 that is not to be read from the backup.
1274
1275 * {clear_tables, TabList}, where TabList is a list of tables
1276 that is to be cleared before the records from the backup are
1277 inserted. That is, all records in the tables are deleted
1278 before the tables are restored. Schema information about the
1279 tables is not cleared or read from the backup.
1280
1281 * {keep_tables, TabList}, where TabList is a list of tables
1282 that is not to be cleared before the records from the backup
1283 are inserted. That is, the records in the backup are added
1284 to the records in the table. Schema information about the
1285 tables is not cleared or read from the backup.
1286
1287 * {recreate_tables, TabList}, where TabList is a list of
1288 tables that is to be recreated before the records from the
1289 backup are inserted. The tables are first deleted and then
1290 created with the schema information from the backup. All the
1291 nodes in the backup need to be operational.
1292
1293 * {default_op, Operation}, where Operation is either of the
1294 operations skip_tables, clear_tables, keep_tables, or recre‐
1295 ate_tables. The default operation specifies which operation
1296 that is to be used on tables from the backup that is not
1297 specified in any of the mentioned lists. If omitted, opera‐
1298 tion clear_tables is used.
1299
1300 The affected tables are write-locked during the restoration.
1301 However, regardless of the lock conflicts caused by this, the
1302 applications can continue to do their work while the restoration
1303 is being performed. The restoration is performed as one single
1304 transaction.
1305
1306 If the database is huge, it it not always possible to restore it
1307 online. In such cases, restore the old database by installing a
1308 fallback and then restart.
1309
1310 s_delete({Tab, Key}) -> ok | transaction abort
1311
1312 Calls the function mnesia:delete(Tab, Key, sticky_write)
1313
1314 s_delete_object(Record) -> ok | transaction abort
1315
1316 Calls the function mnesia:delete_object(Tab, Record,
1317 sticky_write), where Tab is element(1, Record).
1318
1319 s_write(Record) -> ok | transaction abort
1320
1321 Calls the function mnesia:write(Tab, Record, sticky_write),
1322 where Tab is element(1, Record).
1323
1324 schema() -> ok
1325
1326 Prints information about all table definitions on the terminal.
1327
1328 schema(Tab) -> ok
1329
1330 Prints information about one table definition on the terminal.
1331
1332 select(Tab, MatchSpec [, Lock]) -> transaction abort | [Object]
1333
1334 Matches the objects in table Tab using a match_spec as described
1335 in the ets:select/3. Optionally a lock read or write can be
1336 given as the third argument. Default is read. The return value
1337 depends on MatchSpec.
1338
1339 Notice that for best performance, select is to be used before
1340 any modifying operations are done on that table in the same
1341 transaction. That is, do not use write or delete before a
1342 select.
1343
1344 In its simplest forms, the match_spec look as follows:
1345
1346 * MatchSpec = [MatchFunction]
1347
1348 * MatchFunction = {MatchHead, [Guard], [Result]}
1349
1350 * MatchHead = tuple() | record()
1351
1352 * Guard = {"Guardtest name", ...}
1353
1354 * Result = "Term construct"
1355
1356 For a complete description of select, see the ERTS User's Guide
1357 and the ets manual page in STDLIB.
1358
1359 For example, to find the names of all male persons older than 30
1360 in table Tab:
1361
1362 MatchHead = #person{name='$1', sex=male, age='$2', _='_'},
1363 Guard = {'>', '$2', 30},
1364 Result = '$1',
1365 mnesia:select(Tab,[{MatchHead, [Guard], [Result]}]),
1366
1367 select(Tab, MatchSpec, NObjects, Lock) -> transaction abort |
1368 {[Object],Cont} | '$end_of_table'
1369
1370 Matches the objects in table Tab using a match_spec as described
1371 in the ERTS User's Guide, and returns a chunk of terms and a
1372 continuation. The wanted number of returned terms is specified
1373 by argument NObjects. The lock argument can be read or write.
1374 The continuation is to be used as argument to mnesia:select/1,
1375 if more or all answers are needed.
1376
1377 Notice that for best performance, select is to be used before
1378 any modifying operations are done on that table in the same
1379 transaction. That is, do not use mnesia:write or mnesia:delete
1380 before a mnesia:select. For efficiency, NObjects is a recommen‐
1381 dation only and the result can contain anything from an empty
1382 list to all available results.
1383
1384 select(Cont) -> transaction abort | {[Object],Cont} | '$end_of_table'
1385
1386 Selects more objects with the match specification initiated by
1387 mnesia:select/4.
1388
1389 Notice that any modifying operations, that is, mnesia:write or
1390 mnesia:delete, that are done between the mnesia:select/4 and
1391 mnesia:select/1 calls are not visible in the result.
1392
1393 set_debug_level(Level) -> OldLevel
1394
1395 Changes the internal debug level of Mnesia. For details, see
1396 Section Configuration Parameters.
1397
1398 set_master_nodes(MasterNodes) -> ok | {error, Reason}
1399
1400 For each table Mnesia determines its replica nodes (TabNodes)
1401 and starts mnesia:set_master_nodes(Tab, TabMasterNodes). where
1402 TabMasterNodes is the intersection of MasterNodes and TabNodes.
1403 For semantics, see mnesia:set_master_nodes/2.
1404
1405 set_master_nodes(Tab, MasterNodes) -> ok | {error, Reason}
1406
1407 If the application detects a communication failure (in a poten‐
1408 tially partitioned network) that can have caused an inconsistent
1409 database, it can use the function mnesia:set_master_nodes(Tab,
1410 MasterNodes) to define from which nodes each table is to be
1411 loaded. At startup, the Mnesia normal table load algorithm is
1412 bypassed and the table is loaded from one of the master nodes
1413 defined for the table, regardless of when and if Mnesia termi‐
1414 nated on other nodes. MasterNodes can only contain nodes where
1415 the table has a replica. If the MasterNodes list is empty, the
1416 master node recovery mechanism for the particular table is
1417 reset, and the normal load mechanism is used at the next
1418 restart.
1419
1420 The master node setting is always local. It can be changed
1421 regardless if Mnesia is started or not.
1422
1423 The database can also become inconsistent if configuration
1424 parameter max_wait_for_decision is used or if mne‐
1425 sia:force_load_table/1 is used.
1426
1427 snmp_close_table(Tab) -> {aborted, R} | {atomic, ok}
1428
1429 Removes the possibility for SNMP to manipulate the table.
1430
1431 snmp_get_mnesia_key(Tab, RowIndex) -> {ok, Key} | undefined
1432
1433 Types:
1434
1435 Tab ::= atom()
1436 RowIndex ::= [integer()]
1437 Key ::= key() | {key(), key(), ...}
1438 key() ::= integer() | string() | [integer()]
1439
1440 Transforms an SNMP index to the corresponding Mnesia key. If the
1441 SNMP table has multiple keys, the key is a tuple of the key col‐
1442 umns.
1443
1444 snmp_get_next_index(Tab, RowIndex) -> {ok, NextIndex} | endOfTable
1445
1446 Types:
1447
1448 Tab ::= atom()
1449 RowIndex ::= [integer()]
1450 NextIndex ::= [integer()]
1451
1452 RowIndex can specify a non-existing row. Specifically, it can be
1453 the empty list. Returns the index of the next lexicographical
1454 row. If RowIndex is the empty list, this function returns the
1455 index of the first row in the table.
1456
1457 snmp_get_row(Tab, RowIndex) -> {ok, Row} | undefined
1458
1459 Types:
1460
1461 Tab ::= atom()
1462 RowIndex ::= [integer()]
1463 Row ::= record(Tab)
1464
1465 Reads a row by its SNMP index. This index is specified as an
1466 SNMP Object Identifier, a list of integers.
1467
1468 snmp_open_table(Tab, SnmpStruct) -> {aborted, R} | {atomic, ok}
1469
1470 Types:
1471
1472 Tab ::= atom()
1473 SnmpStruct ::= [{key, type()}]
1474 type() ::= type_spec() | {type_spec(), type_spec(), ...}
1475 type_spec() ::= fix_string | string | integer
1476
1477 A direct one-to-one mapping can be established between Mnesia
1478 tables and SNMP tables. Many telecommunication applications are
1479 controlled and monitored by the SNMP protocol. This connection
1480 between Mnesia and SNMP makes it simple and convenient to
1481 achieve this mapping.
1482
1483 Argument SnmpStruct is a list of SNMP information. Currently,
1484 the only information needed is information about the key types
1485 in the table. Multiple keys cannot be handled in Mnesia, but
1486 many SNMP tables have multiple keys. Therefore, the following
1487 convention is used: if a table has multiple keys, these must
1488 always be stored as a tuple of the keys. Information about the
1489 key types is specified as a tuple of atoms describing the types.
1490 The only significant type is fix_string. This means that a
1491 string has a fixed size.
1492
1493 For example, the following causes table person to be ordered as
1494 an SNMP table:
1495
1496 mnesia:snmp_open_table(person, [{key, string}])
1497
1498 Consider the following schema for a table of company employees.
1499 Each employee is identified by department number and name. The
1500 other table column stores the telephone number:
1501
1502 mnesia:create_table(employee,
1503 [{snmp, [{key, {integer, string}}]},
1504 {attributes, record_info(fields, employees)}]),
1505
1506 The corresponding SNMP table would have three columns: depart‐
1507 ment, name, and telno.
1508
1509 An option is to have table columns that are not visible through
1510 the SNMP protocol. These columns must be the last columns of the
1511 table. In the previous example, the SNMP table could have col‐
1512 umns department and name only. The application could then use
1513 column telno internally, but it would not be visible to the SNMP
1514 managers.
1515
1516 In a table monitored by SNMP, all elements must be integers,
1517 strings, or lists of integers.
1518
1519 When a table is SNMP ordered, modifications are more expensive
1520 than usual, O(logN). Also, more memory is used.
1521
1522 Notice that only the lexicographical SNMP ordering is imple‐
1523 mented in Mnesia, not the actual SNMP monitoring.
1524
1525 start() -> ok | {error, Reason}
1526
1527 The startup procedure for a set of Mnesia nodes is a fairly com‐
1528 plicated operation. A Mnesia system consists of a set of nodes,
1529 with Mnesia started locally on all participating nodes. Nor‐
1530 mally, each node has a directory where all the Mnesia files are
1531 written. This directory is referred to as the Mnesia directory.
1532 Mnesia can also be started on disc-less nodes. For more informa‐
1533 tion about disc-less nodes, see mnesia:create_schema/1 and the
1534 User's Guide.
1535
1536 The set of nodes that makes up a Mnesia system is kept in a
1537 schema. Mnesia nodes can be added to or removed from the schema.
1538 The initial schema is normally created on disc with the function
1539 mnesia:create_schema/1. On disc-less nodes, a tiny default
1540 schema is generated each time Mnesia is started. During the
1541 startup procedure, Mnesia exchanges schema information between
1542 the nodes to verify that the table definitions are compatible.
1543
1544 Each schema has a unique cookie, which can be regarded as a
1545 unique schema identifier. The cookie must be the same on all
1546 nodes where Mnesia is supposed to run. For details, see the
1547 User's Guide.
1548
1549 The schema file and all other files that Mnesia needs are kept
1550 in the Mnesia directory. The command-line option -mnesia dir Dir
1551 can be used to specify the location of this directory to the
1552 Mnesia system. If no such command-line option is found, the name
1553 of the directory defaults to Mnesia.Node.
1554
1555 application:start(mnesia) can also be used.
1556
1557 stop() -> stopped
1558
1559 Stops Mnesia locally on the current node.
1560
1561 application:stop(mnesia) can also be used.
1562
1563 subscribe(EventCategory) -> {ok, Node} | {error, Reason}
1564
1565 Ensures that a copy of all events of type EventCategory is sent
1566 to the caller. The available event types are described in the
1567 User's Guide.
1568
1569 sync_dirty(Fun, [, Args]) -> ResultOfFun | exit(Reason)
1570
1571 Calls the Fun in a context that is not protected by a transac‐
1572 tion. The Mnesia function calls performed in the Fun are mapped
1573 to the corresponding dirty functions. It is performed in almost
1574 the same context as mnesia:async_dirty/1,2. The difference is
1575 that the operations are performed synchronously. The caller
1576 waits for the updates to be performed on all active replicas
1577 before the Fun returns. For details, see mnesia:activity/4 and
1578 the User's Guide.
1579
1580 sync_log() -> ok | {error, Reason}
1581
1582 Ensures that the local transaction log file is synced to disk.
1583 On a single node system, data written to disk tables since the
1584 last dump can be lost if there is a power outage. See
1585 dump_log/0.
1586
1587 sync_transaction(Fun, [[, Args], Retries]) -> {aborted, Reason} |
1588 {atomic, ResultOfFun}
1589
1590 Waits until data have been committed and logged to disk (if disk
1591 is used) on every involved node before it returns, otherwise it
1592 behaves as mnesia:transaction/[1,2,3].
1593
1594 This functionality can be used to avoid that one process over‐
1595 loads a database on another node.
1596
1597 system_info(InfoKey) -> Info | exit({aborted, Reason})
1598
1599 Returns information about the Mnesia system, such as transaction
1600 statistics, db_nodes, and configuration parameters. The valid
1601 keys are as follows:
1602
1603 * all. Returns a list of all local system information. Each
1604 element is a {InfoKey, InfoVal} tuple.
1605
1606 New InfoKeys can be added and old undocumented InfoKeys can
1607 be removed without notice.
1608
1609 * access_module. Returns the name of module that is configured
1610 to be the activity access callback module.
1611
1612 * auto_repair. Returns true or false to indicate if Mnesia is
1613 configured to start the auto-repair facility on corrupted
1614 disc files.
1615
1616 * backup_module. Returns the name of the module that is con‐
1617 figured to be the backup callback module.
1618
1619 * checkpoints. Returns a list of the names of the checkpoints
1620 currently active on this node.
1621
1622 * event_module. Returns the name of the module that is the
1623 event handler callback module.
1624
1625 * db_nodes. Returns the nodes that make up the persistent
1626 database. Disc-less nodes are only included in the list of
1627 nodes if they explicitly have been added to the schema, for
1628 example, with mnesia:add_table_copy/3. The function can be
1629 started even if Mnesia is not yet running.
1630
1631 * debug. Returns the current debug level of Mnesia.
1632
1633 * directory. Returns the name of the Mnesia directory. It can
1634 be called even if Mnesia is not yet running.
1635
1636 * dump_log_load_regulation. Returns a boolean that tells if
1637 Mnesia is configured to regulate the dumper process load.
1638
1639 This feature is temporary and will be removed in future
1640 releases.
1641
1642 * dump_log_time_threshold. Returns the time threshold for
1643 transaction log dumps in milliseconds.
1644
1645 * dump_log_update_in_place. Returns a boolean that tells if
1646 Mnesia is configured to perform the updates in the Dets
1647 files directly, or if the updates are to be performed in a
1648 copy of the Dets files.
1649
1650 * dump_log_write_threshold. Returns the write threshold for
1651 transaction log dumps as the number of writes to the trans‐
1652 action log.
1653
1654 * extra_db_nodes. Returns a list of extra db_nodes to be con‐
1655 tacted at startup.
1656
1657 * fallback_activated. Returns true if a fallback is activated,
1658 otherwise false.
1659
1660 * held_locks. Returns a list of all locks held by the local
1661 Mnesia lock manager.
1662
1663 * is_running. Returns yes or no to indicate if Mnesia is run‐
1664 ning. It can also return starting or stopping. Can be called
1665 even if Mnesia is not yet running.
1666
1667 * local_tables. Returns a list of all tables that are config‐
1668 ured to reside locally.
1669
1670 * lock_queue. Returns a list of all transactions that are
1671 queued for execution by the local lock manager.
1672
1673 * log_version. Returns the version number of the Mnesia trans‐
1674 action log format.
1675
1676 * master_node_tables. Returns a list of all tables with at
1677 least one master node.
1678
1679 * protocol_version. Returns the version number of the Mnesia
1680 inter-process communication protocol.
1681
1682 * running_db_nodes. Returns a list of nodes where Mnesia cur‐
1683 rently is running. This function can be called even if Mne‐
1684 sia is not yet running, but it then has slightly different
1685 semantics.
1686
1687 If Mnesia is down on the local node, the function returns
1688 those other db_nodes and extra_db_nodes that for the moment
1689 are operational.
1690
1691 If Mnesia is started, the function returns those nodes that
1692 Mnesia on the local node is fully connected to. Only those
1693 nodes that Mnesia has exchanged schema information with are
1694 included as running_db_nodes. After the merge of schemas,
1695 the local Mnesia system is fully operable and applications
1696 can perform access of remote replicas. Before the schema
1697 merge, Mnesia only operates locally. Sometimes there are
1698 more nodes included in the running_db_nodes list than all
1699 db_nodes and extra_db_nodes together.
1700
1701 * schema_location. Returns the initial schema location.
1702
1703 * subscribers. Returns a list of local processes currently
1704 subscribing to system events.
1705
1706 * tables. Returns a list of all locally known tables.
1707
1708 * transactions. Returns a list of all currently active local
1709 transactions.
1710
1711 * transaction_failures. Returns a number that indicates how
1712 many transactions have failed since Mnesia was started.
1713
1714 * transaction_commits. Returns a number that indicates how
1715 many transactions have terminated successfully since Mnesia
1716 was started.
1717
1718 * transaction_restarts. Returns a number that indicates how
1719 many transactions have been restarted since Mnesia was
1720 started.
1721
1722 * transaction_log_writes. Returns a number that indicates how
1723 many write operations that have been performed to the trans‐
1724 action log since startup.
1725
1726 * use_dir. Returns a boolean that indicates if the Mnesia
1727 directory is used or not. Can be started even if Mnesia is
1728 not yet running.
1729
1730 * version. Returns the current version number of Mnesia.
1731
1732 table(Tab [,[Option]]) -> QueryHandle
1733
1734 Returns a Query List Comprehension (QLC) query handle, see the
1735 qlc(3) manual page in STDLIB. The module qlc implements a query
1736 language that can use Mnesia tables as sources of data. Calling
1737 mnesia:table/1,2 is the means to make the mnesia table Tab
1738 usable to QLC.
1739
1740 Option can contain Mnesia options or QLC options. Mnesia recog‐
1741 nizes the following options (any other option is forwarded to
1742 QLC).
1743
1744 * {lock, Lock}, where lock can be read or write. Default is
1745 read.
1746
1747 * {n_objects,Number}, where n_objects specifies (roughly) the
1748 number of objects returned from Mnesia to QLC. Queries to
1749 remote tables can need a larger chunk to reduce network
1750 overhead. By default, 100 objects at a time are returned.
1751
1752 * {traverse, SelectMethod}, where traverse determines the
1753 method to traverse the whole table (if needed). The default
1754 method is select.
1755
1756 There are two alternatives for select:
1757
1758 * select. The table is traversed by calling mnesia:select/4
1759 and mnesia:select/1. The match specification (the second
1760 argument of select/3) is assembled by QLC: simple filters
1761 are translated into equivalent match specifications. More
1762 complicated filters need to be applied to all objects
1763 returned by select/3 given a match specification that
1764 matches all objects.
1765
1766 * {select, MatchSpec}. As for select, the table is traversed
1767 by calling mnesia:select/3 and mnesia:select/1. The differ‐
1768 ence is that the match specification is explicitly given.
1769 This is how to state match specifications that cannot easily
1770 be expressed within the syntax provided by QLC.
1771
1772 table_info(Tab, InfoKey) -> Info | exit({aborted, Reason})
1773
1774 The table_info/2 function takes two arguments. The first is the
1775 name of a Mnesia table. The second is one of the following keys:
1776
1777 * all. Returns a list of all local table information. Each
1778 element is a {InfoKey, ItemVal} tuple.
1779
1780 New InfoItems can be added and old undocumented InfoItems
1781 can be removed without notice.
1782
1783 * access_mode. Returns the access mode of the table. The
1784 access mode can be read_only or read_write.
1785
1786 * arity. Returns the arity of records in the table as speci‐
1787 fied in the schema.
1788
1789 * attributes. Returns the table attribute names that are spec‐
1790 ified in the schema.
1791
1792 * checkpoints. Returns the names of the currently active
1793 checkpoints, which involve this table on this node.
1794
1795 * cookie. Returns a table cookie, which is a unique system-
1796 generated identifier for the table. The cookie is used
1797 internally to ensure that two different table definitions
1798 using the same table name cannot accidentally be intermixed.
1799 The cookie is generated when the table is created initially.
1800
1801 * disc_copies. Returns the nodes where a disc_copy of the ta‐
1802 ble resides according to the schema.
1803
1804 * disc_only_copies. Returns the nodes where a disc_only_copy
1805 of the table resides according to the schema.
1806
1807 * index. Returns the list of index position integers for the
1808 table.
1809
1810 * load_node. Returns the name of the node that Mnesia loaded
1811 the table from. The structure of the returned value is
1812 unspecified, but can be useful for debugging purposes.
1813
1814 * load_order. Returns the load order priority of the table. It
1815 is an integer and defaults to 0 (zero).
1816
1817 * load_reason. Returns the reason of why Mnesia decided to
1818 load the table. The structure of the returned value is
1819 unspecified, but can be useful for debugging purposes.
1820
1821 * local_content. Returns true or false to indicate if the ta‐
1822 ble is configured to have locally unique content on each
1823 node.
1824
1825 * master_nodes. Returns the master nodes of a table.
1826
1827 * memory. Returns the number of words allocated to the table
1828 on this node.
1829
1830 * ram_copies. Returns the nodes where a ram_copy of the table
1831 resides according to the schema.
1832
1833 * record_name. Returns the record name, common for all records
1834 in the table.
1835
1836 * size. Returns the number of records inserted in the table.
1837
1838 * snmp. Returns the SNMP struct. [] means that the table cur‐
1839 rently has no SNMP properties.
1840
1841 * storage_type. Returns the local storage type of the table.
1842 It can be disc_copies, ram_copies, disc_only_copies, or the
1843 atom unknown. unknown is returned for all tables that only
1844 reside remotely.
1845
1846 * subscribers. Returns a list of local processes currently
1847 subscribing to local table events that involve this table on
1848 this node.
1849
1850 * type. Returns the table type, which is bag, set, or
1851 ordered_set.
1852
1853 * user_properties. Returns the user-associated table proper‐
1854 ties of the table. It is a list of the stored property
1855 records.
1856
1857 * version. Returns the current version of the table defini‐
1858 tion. The table version is incremented when the table defi‐
1859 nition is changed. The table definition can be incremented
1860 directly when it has been changed in a schema transaction,
1861 or when a committed table definition is merged with table
1862 definitions from other nodes during startup.
1863
1864 * where_to_read. Returns the node where the table can be read.
1865 If value nowhere is returned, either the table is not loaded
1866 or it resides at a remote node that is not running.
1867
1868 * where_to_write. Returns a list of the nodes that currently
1869 hold an active replica of the table.
1870
1871 * wild_pattern. Returns a structure that can be given to the
1872 various match functions for a certain table. A record tuple
1873 is where all record fields have value '_'.
1874
1875 transaction(Fun [[, Args], Retries]) -> {aborted, Reason} | {atomic,
1876 ResultOfFun}
1877
1878 Executes the functional object Fun with arguments Args as a
1879 transaction.
1880
1881 The code that executes inside the transaction can consist of a
1882 series of table manipulation functions. If something goes wrong
1883 inside the transaction as a result of a user error or a certain
1884 table not being available, the entire transaction is terminated
1885 and the function transaction/1 returns the tuple {aborted, Rea‐
1886 son}.
1887
1888 If all is going well, {atomic, ResultOfFun} is returned, where
1889 ResultOfFun is the value of the last expression in Fun.
1890
1891 A function that adds a family to the database can be written as
1892 follows if there is a structure {family, Father, Mother, Chil‐
1893 drenList}:
1894
1895 add_family({family, F, M, Children}) ->
1896 ChildOids = lists:map(fun oid/1, Children),
1897 Trans = fun() ->
1898 mnesia:write(F#person{children = ChildOids},
1899 mnesia:write(M#person{children = ChildOids},
1900 Write = fun(Child) -> mnesia:write(Child) end,
1901 lists:foreach(Write, Children)
1902 end,
1903 mnesia:transaction(Trans).
1904
1905 oid(Rec) -> {element(1, Rec), element(2, Rec)}.
1906
1907 This code adds a set of people to the database. Running this
1908 code within one transaction ensures that either the whole family
1909 is added to the database, or the whole transaction terminates.
1910 For example, if the last child is badly formatted, or the exe‐
1911 cuting process terminates because of an 'EXIT' signal while exe‐
1912 cuting the family code, the transaction terminates. Thus, the
1913 situation where half a family is added can never occur.
1914
1915 It is also useful to update the database within a transaction if
1916 several processes concurrently update the same records. For
1917 example, the function raise(Name, Amount), which adds Amount to
1918 the salary field of a person, is to be implemented as follows:
1919
1920 raise(Name, Amount) ->
1921 mnesia:transaction(fun() ->
1922 case mnesia:wread({person, Name}) of
1923 [P] ->
1924 Salary = Amount + P#person.salary,
1925 P2 = P#person{salary = Salary},
1926 mnesia:write(P2);
1927 _ ->
1928 mnesia:abort("No such person")
1929 end
1930 end).
1931
1932 When this function executes within a transaction, several pro‐
1933 cesses running on different nodes can concurrently execute the
1934 function raise/2 without interfering with each other.
1935
1936 Since Mnesia detects deadlocks, a transaction can be restarted
1937 any number of times. This function attempts a restart as speci‐
1938 fied in Retries. Retries must be an integer greater than 0 or
1939 the atom infinity. Default is infinity.
1940
1941 transform_table(Tab, Fun, NewAttributeList, NewRecordName) -> {aborted,
1942 R} | {atomic, ok}
1943
1944 Applies argument Fun to all records in the table. Fun is a func‐
1945 tion that takes a record of the old type and returns a trans‐
1946 formed record of the new type. Argument Fun can also be the atom
1947 ignore, which indicates that only the metadata about the table
1948 is updated. Use of ignore is not recommended, but included as a
1949 possibility for the user do to an own transformation.
1950
1951 NewAttributeList and NewRecordName specify the attributes and
1952 the new record type of the converted table. Table name always
1953 remains unchanged. If record_name is changed, only the Mnesia
1954 functions that use table identifiers work, for example, mne‐
1955 sia:write/3 works, but not mnesia:write/1.
1956
1957 transform_table(Tab, Fun, NewAttributeList) -> {aborted, R} | {atomic,
1958 ok}
1959
1960 Calls mnesia:transform_table(Tab, Fun, NewAttributeList, Rec‐
1961 Name), where RecName is mnesia:table_info(Tab, record_name).
1962
1963 traverse_backup(Source, [SourceMod,] Target, [TargetMod,] Fun, Acc) ->
1964 {ok, LastAcc} | {error, Reason}
1965
1966 Iterates over a backup, either to transform it into a new
1967 backup, or read it. The arguments are explained briefly here.
1968 For details, see the User's Guide.
1969
1970 * SourceMod and TargetMod are the names of the modules that
1971 actually access the backup media.
1972
1973 * Source and Target are opaque data used exclusively by mod‐
1974 ules SourceMod and TargetMod to initialize the backup media.
1975
1976 * Acc is an initial accumulator value.
1977
1978 * Fun(BackupItems, Acc) is applied to each item in the backup.
1979 The Fun must return a tuple {BackupItems,NewAcc}, where
1980 BackupItems is a list of valid backup items, and NewAcc is a
1981 new accumulator value. The returned backup items are written
1982 in the target backup.
1983
1984 * LastAcc is the last accumulator value. This is the last
1985 NewAcc value that was returned by Fun.
1986
1987 uninstall_fallback() -> ok | {error,Reason}
1988
1989 Calls the function mnesia:uninstall_fallback([{scope, global}]).
1990
1991 uninstall_fallback(Args) -> ok | {error,Reason}
1992
1993 Deinstalls a fallback before it has been used to restore the
1994 database. This is normally a distributed operation that is
1995 either performed on all nodes with disc resident schema, or
1996 none. Uninstallation of fallbacks requires Erlang to be opera‐
1997 tional on all involved nodes, but it does not matter if Mnesia
1998 is running or not. Which nodes that are considered as disc-resi‐
1999 dent nodes is determined from the schema information in the
2000 local fallback.
2001
2002 Args is a list of the following tuples:
2003
2004 * {module, BackupMod}. For semantics, see mnesia:install_fall‐
2005 back/2.
2006
2007 * {scope, Scope}. For semantics, see mnesia:install_fall‐
2008 back/2.
2009
2010 * {mnesia_dir, AlternateDir}. For semantics, see mne‐
2011 sia:install_fallback/2.
2012
2013 unsubscribe(EventCategory) -> {ok, Node} | {error, Reason}
2014
2015 Stops sending events of type EventCategory to the caller.
2016
2017 Node is the local node.
2018
2019 wait_for_tables(TabList, Timeout) -> ok | {timeout, BadTabList} |
2020 {error, Reason}
2021
2022 Some applications need to wait for certain tables to be accessi‐
2023 ble to do useful work. mnesia:wait_for_tables/2 either hangs
2024 until all tables in TabList are accessible, or until timeout is
2025 reached.
2026
2027 wread({Tab, Key}) -> transaction abort | RecordList
2028
2029 Calls the function mnesia:read(Tab, Key, write).
2030
2031 write(Record) -> transaction abort | ok
2032
2033 Calls the function mnesia:write(Tab, Record, write), where Tab
2034 is element(1, Record).
2035
2036 write(Tab, Record, LockKind) -> transaction abort | ok
2037
2038 Writes record Record to table Tab.
2039
2040 The function returns ok, or terminates if an error occurs. For
2041 example, the transaction terminates if no person table exists.
2042
2043 The semantics of this function is context-sensitive. For
2044 details, see mnesia:activity/4. In transaction-context, it
2045 acquires a lock of type LockKind. The lock types write and
2046 sticky_write are supported.
2047
2048 write_lock_table(Tab) -> ok | transaction abort
2049
2050 Calls the function mnesia:lock({table, Tab}, write).
2051
2053 Mnesia reads the following application configuration parameters:
2054
2055 * -mnesia access_module Module. The name of the Mnesia activity
2056 access callback module. Default is mnesia.
2057
2058 * -mnesia auto_repair true | false. This flag controls if Mnesia
2059 automatically tries to repair files that have not been properly
2060 closed. Default is true.
2061
2062 * -mnesia backup_module Module. The name of the Mnesia backup call‐
2063 back module. Default is mnesia_backup.
2064
2065 * -mnesia debug Level. Controls the debug level of Mnesia. The possi‐
2066 ble values are as follows:
2067
2068 none:
2069 No trace outputs. This is the default.
2070
2071 verbose:
2072 Activates tracing of important debug events. These events gener‐
2073 ate {mnesia_info, Format, Args} system events. Processes can sub‐
2074 scribe to these events with mnesia:subscribe/1. The events are
2075 always sent to the Mnesia event handler.
2076
2077 debug:
2078 Activates all events at the verbose level plus full trace of all
2079 debug events. These debug events generate {mnesia_info, Format,
2080 Args} system events. Processes can subscribe to these events with
2081 mnesia:subscribe/1. The events are always sent to the Mnesia
2082 event handler. On this debug level, the Mnesia event handler
2083 starts subscribing to updates in the schema table.
2084
2085 trace:
2086 Activates all events at the debug level. On this level, the Mne‐
2087 sia event handler starts subscribing to updates on all Mnesia
2088 tables. This level is intended only for debugging small toy sys‐
2089 tems, as many large events can be generated.
2090
2091 false:
2092 An alias for none.
2093
2094 true:
2095 An alias for debug.
2096
2097 * -mnesia core_dir Directory. The name of the directory where Mnesia
2098 core files is stored, or false. Setting it implies that also RAM-
2099 only nodes generate a core file if a crash occurs.
2100
2101 * -mnesia dc_dump_limit Number. Controls how often disc_copies tables
2102 are dumped from memory. Tables are dumped when filesize(Log) >
2103 (filesize(Tab)/Dc_dump_limit). Lower values reduce CPU overhead but
2104 increase disk space and startup times. Default is 4.
2105
2106 * -mnesia dir Directory. The name of the directory where all Mnesia
2107 data is stored. The directory name must be unique for the current
2108 node. Two nodes must never share the the same Mnesia directory. The
2109 results are unpredictable.
2110
2111 * -mnesia dump_disc_copies_at_startup true | false. If set to false,
2112 this disables the dumping of disc_copies tables during startup
2113 while tables are being loaded. The default is true.
2114
2115 * -mnesia dump_log_load_regulation true | false. Controls if log
2116 dumps are to be performed as fast as possible, or if the dumper is
2117 to do its own load regulation. Default is false.
2118
2119 This feature is temporary and will be removed in a future release
2120
2121 * -mnesia dump_log_update_in_place true | false. Controls if log
2122 dumps are performed on a copy of the original data file, or if the
2123 log dump is performed on the original data file. Default is true
2124
2125 *
2126
2127
2128 -mnesia dump_log_write_threshold Max. Max is an integer that speci‐
2129 fies the maximum number of writes allowed to the transaction log
2130 before a new dump of the log is performed. Default is 100 log
2131 writes.
2132
2133 *
2134
2135
2136 -mnesia dump_log_time_threshold Max. Max is an integer that speci‐
2137 fies the dump log interval in milliseconds. Default is 3 minutes.
2138 If a dump has not been performed within dump_log_time_threshold
2139 milliseconds, a new dump is performed regardless of the number of
2140 writes performed.
2141
2142 * -mnesia event_module Module. The name of the Mnesia event handler
2143 callback module. Default is mnesia_event.
2144
2145 * -mnesia extra_db_nodes Nodes specifies a list of nodes, in addition
2146 to the ones found in the schema, with which Mnesia is also to
2147 establish contact. Default is [] (empty list).
2148
2149 * -mnesia fallback_error_function {UserModule, UserFunc}. Specifies a
2150 user-supplied callback function, which is called if a fallback is
2151 installed and Mnesia goes down on another node. Mnesia calls the
2152 function with one argument, the name of the dying node, for exam‐
2153 ple, UserModule:UserFunc(DyingNode). Mnesia must be restarted, oth‐
2154 erwise the database can be inconsistent. The default behavior is to
2155 terminate Mnesia.
2156
2157 * -mnesia max_wait_for_decision Timeout. Specifies how long Mnesia
2158 waits for other nodes to share their knowledge about the outcome of
2159 an unclear transaction. By default, Timeout is set to the atom
2160 infinity. This implies that if Mnesia upon startup detects a
2161 "heavyweight transaction" whose outcome is unclear, the local Mne‐
2162 sia waits until Mnesia is started on some (in the worst case all)
2163 of the other nodes that were involved in the interrupted transac‐
2164 tion. This is a rare situation, but if it occurs, Mnesia does not
2165 guess if the transaction on the other nodes was committed or termi‐
2166 nated. Mnesia waits until it knows the outcome and then acts
2167 accordingly.
2168
2169 If Timeout is set to an integer value in milliseconds, Mnesia
2170 forces "heavyweight transactions" to be finished, even if the out‐
2171 come of the transaction for the moment is unclear. After Timeout
2172 milliseconds, Mnesia commits or terminates the transaction and con‐
2173 tinues with the startup. This can lead to a situation where the
2174 transaction is committed on some nodes and terminated on other
2175 nodes. If the transaction is a schema transaction, the inconsis‐
2176 tency can be fatal.
2177
2178 * -mnesia no_table_loaders NUMBER. Specifies the number of parallel
2179 table loaders during start. More loaders can be good if the network
2180 latency is high or if many tables contain few records. Default is
2181 2.
2182
2183 * -mnesia send_compressed Level. Specifies the level of compression
2184 to be used when copying a table from the local node to another one.
2185 Default is 0.
2186
2187 Level must be an integer in the interval [0, 9], where 0 means no
2188 compression and 9 means maximum compression. Before setting it to a
2189 non-zero value, ensure that the remote nodes understand this con‐
2190 figuration.
2191
2192 * -mnesia schema_location Loc. Controls where Mnesia looks for its
2193 schema. Parameter Loc can be one of the following atoms:
2194
2195 disc:
2196 Mandatory disc. The schema is assumed to be located in the Mnesia
2197 directory. If the schema cannot be found, Mnesia refuses to
2198 start. This is the old behavior.
2199
2200 ram:
2201 Mandatory RAM. The schema resides in RAM only. At startup, a tiny
2202 new schema is generated. This default schema only contains the
2203 definition of the schema table and only resides on the local
2204 node. Since no other nodes are found in the default schema, con‐
2205 figuration parameter extra_db_nodes must be used to let the node
2206 share its table definitions with other nodes.
2207
2208 Parameter extra_db_nodes can also be used on disc based nodes.
2209
2210 opt_disc:
2211 Optional disc. The schema can reside on disc or in RAM. If the
2212 schema is found on disc, Mnesia starts as a disc-based node and
2213 the storage type of the schema table is disc_copies. If no schema
2214 is found on disc, Mnesia starts as a disc-less node and the stor‐
2215 age type of the schema table is ram_copies. Default value for the
2216 application parameter is opt_disc.
2217
2218 First, the SASL application parameters are checked, then the command-
2219 line flags are checked, and finally, the default value is chosen.
2220
2222 application(3), dets(3), disk_log(3), ets(3), mnesia_registry(3),
2223 qlc(3)
2224
2225
2226
2227Ericsson AB mnesia 4.15.3.2 mnesia(3)