Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified en/.gitbook/assets/open-shared-database-dialog.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
16 changes: 10 additions & 6 deletions en/collaborative-work/sqldatabase/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,31 @@

# Shared SQL Database

JabRef uses [PostgreSQL](https://www.postgresql.org/) as the database system for shared databases. Support for MySQL/MariaDB and Oracle was removed due to high maintenance effort.

Check warning on line 7 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.Passive] 'was removed' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'was removed' may be passive voice. Use active voice if you can.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 7, "column": 137}}}, "severity": "WARNING"}

## Usage

To use this feature you have to connect to a remote database. To do so you have to open **File** in the menu bar and then click the **Connect to shared database** item. The **Connect to shared database** dialog will open and you will have to fill in the shared's database connection settings. Then, you have to fill out the remaining fields with the according information. If you like you can save your password by clicking the **Remember password?** checkbox.
To use this feature you have to connect to a remote database. To do so you have to open **File** in the menu bar and then click **Shared database** and **Connect to shared database**. The **Connect to shared database** dialog will open. The quickest way to fill it in is to paste the connection URL of your database (as shown by your hosting provider, e.g. `postgres://user:password@host:5432/database?sslmode=require`, a JDBC URL, the keyword form `host=… port=… dbname=… user=… password=…`, or even the whole `psql 'postgres://…'` command line) into the **Connection URL** field: host, port, database, user, and password are filled in automatically. Alternatively, enter these details by hand. If you like you can save your password by ticking the **Remember password** checkbox; it is then kept in your operating system's credential store (keychain). The checkbox is unavailable if no credential store can be reached.

Check warning on line 11 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.Passive] 'be reached' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'be reached' may be passive voice. Use active voice if you can.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 11, "column": 910}}}, "severity": "WARNING"}

Check warning on line 11 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.TooWordy] 'it is' is too wordy. Raw Output: {"message": "[write-good.TooWordy] 'it is' is too wordy.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 11, "column": 783}}}, "severity": "WARNING"}

Check warning on line 11 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.TooWordy] 'Alternatively' is too wordy. Raw Output: {"message": "[write-good.TooWordy] 'Alternatively' is too wordy.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 11, "column": 653}}}, "severity": "WARNING"}

Check warning on line 11 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.Passive] 'are filled' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'are filled' may be passive voice. Use active voice if you can.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 11, "column": 624}}}, "severity": "WARNING"}

Settings that are rarely needed (SSL and a custom JDBC URL for the *expert mode*) are found in the collapsible **Advanced** section. When a pasted URL contains parameters JabRef has no dedicated field for (such as `sslmode=require`), expert mode is switched on and the parameters are kept in the custom JDBC URL, so the connection is made exactly as the URL says.

Check warning on line 13 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.Passive] 'is made' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'is made' may be passive voice. Use active voice if you can.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 13, "column": 332}}}, "severity": "WARNING"}

Check warning on line 13 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.Passive] 'are kept' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'are kept' may be passive voice. Use active voice if you can.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 13, "column": 281}}}, "severity": "WARNING"}

Check warning on line 13 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.Passive] 'is switched' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'is switched' may be passive voice. Use active voice if you can.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 13, "column": 247}}}, "severity": "WARNING"}

Check warning on line 13 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.Passive] 'are found' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'are found' may be passive voice. Use active voice if you can.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 13, "column": 83}}}, "severity": "WARNING"}

If the database was already used by an older version of JabRef, its content is migrated to the new table structure automatically when the first client connects. The old tables are kept untouched, so older JabRef versions can still be used with them.

Check warning on line 15 in en/collaborative-work/sqldatabase/README.md

View workflow job for this annotation

GitHub Actions / vale-lint

[vale] reported by reviewdog 🐶 [write-good.Passive] 'is migrated' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'is migrated' may be passive voice. Use active voice if you can.", "location": {"path": "en/collaborative-work/sqldatabase/README.md", "range": {"start": {"line": 15, "column": 77}}}, "severity": "WARNING"}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

1. Migration support is overstated 🐞 Bug ≡ Correctness

The new text says any database used by an older JabRef is migrated automatically and remains usable
by older clients, but the documented pre-3.6 schema is explicitly unsupported and requires a manual
export/import migration. Users with such databases may expect a safe first-connect migration that
this documentation says is unavailable.
Agent Prompt
## Issue description
The automatic-migration statement applies without a version or schema boundary, contradicting the documented manual migration requirement for pre-3.6 databases.

## Issue Context
State exactly which prior JabRef versions/table layouts the new migration supports, and retain a clear exception or link for pre-3.6 databases. Reconcile the dedicated migration page if its workflow is no longer applicable.

## Fix Focus Areas
- en/collaborative-work/sqldatabase/README.md[13-13]
- en/collaborative-work/sqldatabase/sqldatabasemigration.md[5-24]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@qodo can you verify wiht jabref's main repo again? Did we really remove the old schema? Probably we did already in 5.15?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can’t verify the current main-repo implementation from this thread alone. However, even if the legacy schema was removed in 5.15, the documentation still claims migration for any older JabRef database.

Please confirm the migration code’s supported schema/version range and whether pre-3.6 tables are handled. If they are not, the sentence needs an explicit cutoff and a link to the manual export/import procedure; if they are, the migration page should be updated to reflect that pre-3.6 databases are now supported.

@Siedlerchr Siedlerchr Sep 12, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@qodo Check the source code https://github.com/JabRef/jabref


### SSL configuration

Since version 5.0 JabRef supports secure SSL connection to the database. For PostgreSQL make sure the server supports SSL and you have correctly setup the [certificates](https://www.postgresql.org/docs/current/static/ssl-tcp.html). Then [convert the client certificates](https://jdbc.postgresql.org/documentation/ssl/#configuring-the-client) into a java readable format and import them into a (custom) keystore. For MySQL the procedure is similar. [Setting up MySQL with SSL](https://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html) and converting the certificates for the java keystore. However, it has only been tested with PostgreSQL. Once the certificates are imported into the keystore, specify the path to the keystore file in the connection dialog and the password for accessing the keystore.
Tick **Use SSL** in the **Advanced** section to require an encrypted connection. Like `psql`, this does not verify the server's certificate, so managed PostgreSQL providers with their own certificate authorities work out of the box; a pasted URL with `sslmode=require` ticks the box for you. If you want the server certificate verified, use the expert mode with a JDBC URL such as `jdbc:postgresql://host:5432/database?sslmode=verify-full&sslrootcert=/path/to/ca.pem`; a pasted URL with `sslmode=verify-full` sets this up automatically.

![Screenshot of Connect to shared database dialog](../../.gitbook/assets/open-shared-database-dialog.png)

After connecting to your shared database, your main window should look like this:

![Screenshot of JabRef with an open shared database](../../.gitbook/assets/open-shared-databse-screenshot.png)

JabRef will automatically detect your changes and push them to the shared side. JabRef will also constantly check if there is a newer version available. If you experience connection issues, you can pull changes from your shared database via the icon in the icon bar. If a newer version is available, JabRef will try to automatically merge the new version and your local copy. If this fails, the **Update refused** dialog will show up. You will then have to manually merge using the **Update refused** dialog. The dialog helps you by pointing out the differences, you then will have to choose if you want to keep your local version or update to the shared version. Confirm your merge by clicking on **Merge entries**.
JabRef will automatically detect your changes and push them to the shared side. Changes made by other users arrive automatically as well: JabRef listens for change notifications from the database, so edits, new groups, and changed library settings show up in all connected JabRef instances without any manual action. If a newer version is available, JabRef will try to automatically merge the new version and your local copy. If this fails, the **Update refused** dialog will show up. You will then have to manually merge using the **Update refused** dialog. The dialog helps you by pointing out the differences, you then will have to choose if you want to keep your local version or update to the shared version. Confirm your merge by clicking on **Merge entries**.

![Screenshot of Update refused dialog](../../.gitbook/assets/update-refused-merge-dialog.png)

The **Update refused** dialog can also take a different form, if the BibEntry you currently work on has been deleted on the shared side. You can choose to keep the BibEntry in the database by clicking **Keep** or update to the shared side and click **Close**.

![Screenshot of Update refused dialog due to a deleted entry](../../.gitbook/assets/update-refused-deleted-entry-dialog.png)
If somebody else deletes entries, they disappear from your library as well and a notification tells you how many were deleted on the shared side. If you were still working on one of them, use **Undo** to get it back: it is inserted into the shared database again.

If you experience a problem with your connection to your shared database, the **Connection lost** dialog will show up. You can choose to **Reconnect**, **Work offline** or **Close database**. Most of the time simply reconnecting will fix this problem, if that's not the case you will have to choose between **Work offline** or **Close database**. Pick **Work offline** if you want to make sure your changes are saved. If you think there is nothing to save just pick **Close database**. If you choose to work offline, JabRef will convert the shared database to a local .bib database. Since you are no longer working online, but instead on a local database, you will have to import your work via copy and paste into the shared database. However before you import it into the shared database, make sure to check if changes happened during your offline time. Otherwise you might override someone else's work.

Expand Down
Loading