Table of Contents
Since release 1.0, KMyMoney allows you to hold your data in a relational database. One of the advantages of using this industry-standard format is that it may allow you to view your data using one of the graphic front ends such as OpenOffice.org™ or LibreOffice™, or perhaps in some format that KMyMoney currently doesn't provide. Also, a little knowledge of SQL (“Structured Query Language”, the language used world-wide to access relational databases) should enable you more easily to export data to an external program, for example, a budgeting application.
Note
Although most relational database systems allow concurrent access to a database by more than one user, this is not possible with KMyMoney. Even though KMyMoney can store its data in a relational database, it actually uses the database as just a different type of file storage. When you open your file, the program reads all of the data from the database. As you work with your data, the changes are made only to the internal storage; they are not immediately written back to the database. Only when you save your data does KMyMoney write the entire file back to the database.
There have been requests for KMyMoney to update the database for each data change, but this would require a significant change to the entire way the program manages its internal data structures, so this is extremely unlikely to happen in the foreseeable future.
To access the database, KMyMoney uses the SQL module supplied by Qt™ Software as part of their Qt™ programming system. This module supports many database systems through a collection of drivers. Qt™ has drivers for a large number of open source and proprietary relational database systems, including MySQL™, PostgreSQL, and SQLCipher. The module also supports some 'heavier', more industrial, systems such as Oracle® and IBM DB2®.
Previous versions of KMyMoney supported SQLite. This has been replaced with support for SQLCipher, which is a standalone fork of the SQLite database library that adds 256 bit AES encryption and other security features. The SQLCipher driver will read existing SQLite files. See the section below on SQLCipher for more details.
With the exception of SQLCipher, these systems use a client/server model, where the 'client' software sits on 'your' machine, while the server lives on the same machine as the database itself, which may be elsewhere on a network. Of course, in the normal scenario for a personal finance application such as KMyMoney, 'your' machine can act as both client and server. Your first task therefore, having decided which database system you wish to use, is to install the client, and most probably server, software.
In addition to the database software itself, you must also install the corresponding Qt™ driver module. Most Linux® distributions will include driver modules for the more popular databases. Otherwise, check with the Qt™ software web site and search for “SQL drivers”.
Note
SQLCipher and SQLite do not operate on a client/server model; each database is held in a regular file, local or remote, accessed using the normal methods supplied by the underlying operating system. In this case, therefore, there is only one software package and the driver to install. Also, some of the following information, particularly that related to administration, may not apply.
Looking after databases is a little more complex than dealing with regular files. Each system has different methods for performing those necessary administrative tasks such as creating databases, assigning permissions to various users, or producing backups. Describing these tasks is outside the scope of this manual, but all of the supported products provide comprehensive reference documentation, and a quick search of the web will point you at many tutorials on the subject.
KMyMoney includes SQL code to create an initial database to hold your data if one doesn't exist. However, it is strongly recommended that you pre-create a database, because most of the products provide a number of options which may be relevant. One that may be of particular importance to some would be the designation of the character set (e.g., UTF-8) to be used for text fields.
At this time, you will also need to specify permissions for various users to perform different operations on the database. In most systems, the user who creates the database will be automatically assigned all permissions, but this is an area in which the documentation should be consulted.
For your first use of the database, and occasionally at other times when the
database layout changes, you will need permission (also called privileges) to
create and alter tables and views (see next paragraph.) There may be different
names for the permission/privilege in different systems, but something like
CREATE and ALTER should be commonplace. For
normal running, you will need to be able to read and write records; these are
normally defined in SQL as SELECT, INSERT,
UPDATE, and DELETE permissions.
On your first use, KMyMoney will attempt to create the necessary table structures. In order to achieve the maximum compatibility between various database types, only a subset of common data types are used. There may nevertheless be situations where a particular type is not supported, and in this case, provision has been made to generate the SQL code necessary to create the tables. This code can then be modified as required and used to create the tables outside of KMyMoney. Should you find yourself in this situation, help can usually be obtained from one of the channels listed in the section on Getting Help. See Manual Database Creation for more information.
Using KMyMoney, open or import an existing data file, or create a new one. Then select → menu item. Select SQL from the Storage type to use for your data dropdown, and click . You will then see the following dialog:

Complete the fields appropriate to the database type you have selected (as usual, mandatory fields will be highlighted) and click to create the database.
This dropdown lists all the Qt™ SQL drivers installed on your system. Select the driver for your database type. If the one you want is not in the list, you need to install the appropriate driver. See your distribution documentation, or visit the Qt™ software web site and search for 'SQL drivers'.
SQLCipher has one database per file so enter the filename in which you wish to create the database. To browse the file system, click the icon to the right of the filename. For SQLCipher databases, the Database Name, Host name, Username fields are not relevant. The SQLCipher file must have the appropriate read/write permissions set by the underlying file system to enable the appropriate access for the currently logged-in user.
The creators of SQLCipher released version 4.0 in November, 2018. However, many KMyMoney users, especially those who do not upgrade very often, or who use LTS (Long Term Support) Linux® distributions, may still be using a database created with version 3 of SQLCipher. At some point, usually after upgrading KMyMoney or their distribution, they find they are unable to open their database, with an error that is not particularly informative or useful. What is required in this case is to upgrade the database itself from version 3 to version 4. Instructions for this can be found on the SQLCipher website.
The default database name is KMyMoney, but you may choose some
other name if you like. For some database types, KMyMoney may not be able to
create the database, so it must be pre-created using the appropriate administrative
procedure. However, KMyMoney will usually be able to create all table structures
where necessary. If not, you can create them yourself. See Manual Database Creation for more
information.
For the average user, the default name of “localhost”, being the machine you are currently using, is correct. For networked databases, enter the connected host name of the database server.
Check the permissions set up on your database, or contact the database administrator, for the correct values to use here. The user name must be capable of selecting, inserting, updating, and deleting records. If the user name is the same as your login name, a password is not normally required.
To access your data in KMyMoney, use the → menu item. This will open a dialog similar to the above.
Note
If you created your database by first opening a file, and then doing and choosing SQL as described above, then any subsequent changes to your data are saved only in the database, not in the file. This means that you can use the file as a backup or snapshot of your data at a particular time. To make a new backup like this, open your database, choose the → menu item, choose XML as the storage type, and giving an appropriate file name. Remember to re-open your database, so KMyMoney does not continue to use the file.
To access your data in other formats, you will need to know a little about how it is held in relational databases. By far the easiest way to get a feel for this is to open the database in a front-end such as OpenOffice.org™. This provides a list of the various tables which make up the database, and enables you to see the layout of each of them.
To extract data, e.g., into a spreadsheet or external file, it is almost invariably necessary to select linked data from more than one table. This is done by “joining” the tables, using a field which is common to them. You can find a lot more information about how this is done from the online database tutorials mentioned above. The following table lists the fields used to define these inter-table relationships.
|
Relationship |
Match |
With |
|---|---|---|
|
Institutions and Accounts |
|
|
|
Accounts Parent/Child |
|
|
|
Transactions and Splits (see Note 1) |
|
|
|
Accounts and Splits |
|
|
|
Payees and Splits |
|
|
|
Schedules and Transactions |
|
|
|
Transactions and Currencies |
|
|
|
|
|
|
|
Securities and Prices |
|
|
|
Currency Rates |
|
|
Notes:
1 – txType = "N” for normal transactions, "S” for scheduled transactions
2 – if kmmAccounts.isStockAccount = "Y”
Several of the data fields are held in an internal format which may not be immediately useful to external programs. In these cases, the information has been duplicated in both internal and external formats.
Monetary amounts and share values are shown both in numerator/denominator format,
and, with a field name suffixed with “ Formatted ”,
in the form as typically displayed.
Similarly, some fields, such as account type appear both as a numeric code, and in
a field suffixed 'String' in the form and language of the
application.
Having data in an industry standard format does give you the ability to modify it outside the KMyMoney application. DO NOT DO IT unless you really know what you are doing, and always be certain to make a backup copy of your data first. If you get it wrong, KMyMoney may not be able to access your data, and you could even end up losing it altogether. You have been warned!
Most database systems allow you to store commonly used queries and procedures, and
in some cases, these may be held as tables or other objects within your database
itself. As you will have guessed from the above, all the tables used by KMyMoney
begin with the lowercase letters 'kmm'. This standard will be
maintained, and only tables beginning with these letters will be updated. Thus,
provided you avoid these in the naming of your queries etc., you should not
experience any problems.
Note
This section covers more advanced database usage and may be skipped by the general user.
There may be occasions when KMyMoney is unable to create the database automatically, or creates it without some options required by the user. For example, the database system used may not completely conform to standard SQL usage, or support may be introduced for new systems which have not been fully tested in KMyMoney.
Prior to using this facility, you should try just creating the database entry
itself (i.e. with the CREATE DATABASE statement). Provided the
database exists, KMyMoney may well be able to create the tables, etc. in the
normal database save procedure described above.
If this fails, it is possible to generate the basic SQL commands needed to create the various tables, views, and indexes required by the application. Select the → menu item. This will present the following dialog:

On selecting the database type, the appropriate SQL will appear in the SQL for creation text box; this can be edited by the user, or saved to a text file by clicking . In the latter case, the database must be created using the administrative functions provided by the database system.
If after editing the text in the dialog, you want KMyMoney to create the
database, you will need to complete the other fields in the dialog, as detailed in
Creating a Database above,
and click . Note that, except in the case of
SQLite, you will need either to include a suitable CREATE
DATABASE statement as the first command, or have previously issued such a
command externally to KMyMoney.
You should be very careful editing the definitions of any of the basic tables or
views (those with names beginning with 'kmm'.) Some changes,
such as increasing the length of an integer field, may have little impact, but you
should not remove or change the sequence of any fields, or KMyMoney may refuse to
function, or may corrupt your data.
While adding or removing indexes may improve performance, you should also be aware that the opposite may happen. Some knowledge of the internal operation of KMyMoney may help to get the best performance in these circumstances.