Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add PostgreSQL backend #1194

Merged
merged 1 commit into from
Nov 2, 2024
Merged

Conversation

leso-kn
Copy link
Contributor

@leso-kn leso-kn commented Jul 17, 2023

This PR adds experimental PostgreSQL support.

Based upon the work of @dxtr, extended and adapted to the latest version of Baikal.

The following features were tested:

  • Baikal setup procedure / UI (with Postgres)
  • Creating / deleting / editing a user
  • Creating / deleting / editing a calendar
  • Listing contacts
  • Logging in / creating / deleting an event through the webui (User login)
  • Subscribing to a calendar / adding / deleting an event through a DAV client
    • Thunderbird
    • DAVx⁵ for Android

@leso-kn leso-kn changed the title Add Pgsql backend (#122) Add Pgsql backend Jul 17, 2023
@leso-kn
Copy link
Contributor Author

leso-kn commented Jul 17, 2023

ref #122

@leso-kn leso-kn changed the title Add Pgsql backend Add PostgreSQL backend Jul 17, 2023
@2Belette
Copy link

since one ! does this PR would make it into new release ?

@comrada
Copy link

comrada commented Sep 21, 2023

Looking forward to Postgresql support!! I keep MySQL on the server just for the sake of Baikal.

@ndruba
Copy link

ndruba commented Dec 31, 2023

I use Baikal with this patch for my personal use during half year from clean install and don't have any troubles.

The following features were tested:

Baikal setup procedure / UI (with Postgres)
Creating a user
Creating / editing a calendar (with Todos and Tasks)
Creating / editing Address Book
Logging in, listing an event and contacts through the webui (dav.php)
Subscribing to a calendar and address book / adding / deleting an event and contacts through a DAV client
Thunderbird
Carddav-sync/Caldav-sync

Copy link

@Terrance Terrance left a comment

Choose a reason for hiding this comment

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

I've just had a go at setting this up locally (I have a lot of calendars so SQLite is probably not a great choice, and I'm not interested in setting up MySQL just for this when I already have other software talking to PostgreSQL) and it seems to work, but with a couple of snags during the initial setup.

# Asserting PDO::SQLite or PDO::MySQL
$aPDODrivers = \PDO::getAvailableDrivers();
if (!in_array('sqlite', $aPDODrivers, true) && !in_array('mysql', $aPDODrivers, true)) {
exit('<strong>Baikal Fatal Error</strong>: Both <strong>PDO::sqlite</strong> and <strong>PDO::mysql</strong> are unavailable. One of them at least is required by Baikal.');
}

This check needs updating to also include PDO::pgsql as a valid option.

Core/Frameworks/Flake/Framework.php Outdated Show resolved Hide resolved
@leso-kn leso-kn force-pushed the feature/pgsql branch 2 times, most recently from a43af02 to be51975 Compare January 5, 2024 20:57
Copy link

@Terrance Terrance left a comment

Choose a reason for hiding this comment

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

One more hiccup with the settings page (/admin/?/settings/database/):

if (intval($oForm->modelInstance()->get("mysql")) === 1) {

These will need similar updates to the installation's database page to check for PostgreSQL too (currently the page falls through to SQLite).

@leso-kn leso-kn force-pushed the feature/pgsql branch 2 times, most recently from bed2fc8 to 54ebfe0 Compare February 17, 2024 13:52
@leso-kn
Copy link
Contributor Author

leso-kn commented Feb 17, 2024

@Terrance Done! Sorry for the late reply, the updates described in your previous comment are now included in 54ebfe0

@toby63 toby63 mentioned this pull request Mar 1, 2024
@dewey
Copy link

dewey commented Apr 29, 2024

Great to see this, any idea what would be needed to get this merged?

@leso-kn leso-kn requested a review from Terrance June 7, 2024 11:26
Copy link

@Terrance Terrance left a comment

Choose a reason for hiding this comment

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

I've not seen any other issues. 👍

@PrivatePuffin
Copy link

Combined with CloudNative-PG this finally gives an easy route to enterprise-grade hosted baikal, nice!

@nileshtrivedi
Copy link

Looking forward to this being merged that would finally fix #122

@leso-kn leso-kn force-pushed the feature/pgsql branch 4 times, most recently from 53175ea to b322aaa Compare July 21, 2024 15:38
Co-authored-by: Kim Lidström <[email protected]>
@kotovalexarian
Copy link

I've just installed Baikal with this patch to my server. Looks like everything works well with PostgreSQL. I hope this patch will be accepted so I can use the official build.

@n-rodriguez
Copy link

Hi there! Any news? kind ping to @ByteHamster

1 similar comment
@n-rodriguez
Copy link

Hi there! Any news? kind ping to @ByteHamster

@leso-kn leso-kn force-pushed the feature/pgsql branch 2 times, most recently from 564ca56 to 1e4b14c Compare November 1, 2024 21:20
@ByteHamster ByteHamster merged commit c5227aa into sabre-io:master Nov 2, 2024
7 checks passed
@ByteHamster
Copy link
Member

Thanks!

@MrAlucardDante
Copy link

Is there a migration path available? Or do we have to export everything, switch to Postgres then re-import dav entries?

@ByteHamster
Copy link
Member

There is no migration path. Upgrading Baikal will keep the database that you had before.

@ByteHamster
Copy link
Member

Hmm @leso-kn I noticed that this PR broke part of the initial installation wizard (showing pgsql settings even when they should not be shown). Could you please have a look at that and fix it?

@ByteHamster
Copy link
Member

Oh. I just noticed that this PR actually completely breaks new installs with sqlite... This is kind of bad.

@MrAlucardDante
Copy link

Since it's not released yet, could you please try to load a populated sqlite db into postgres with something like pgloader to see if we have things to adapt, like autoincremented ids or special conversion for timestamps? Here's so useful infos https://stackoverflow.com/questions/4581727/how-to-convert-sqlite-sql-dump-file-to-postgresql

@ByteHamster
Copy link
Member

It is already released.

@MrAlucardDante
Copy link

It is already released.

My bad, browser cache showed me the previous release. I thought it was just merged. But since it breaks new installs using sqlite, the test could be included in an upcoming fix

@n-rodriguez
Copy link

n-rodriguez commented Nov 4, 2024

What I did :

  1. Edit db.sqlite with https://sqlitebrowser.org/dl/
    1.1 modify all tables to check AI (auto increment) checkbox on id columns
    1.2 modify calendarinstances to change access column type from integer COMMENT 1 = owner, 2 = read, 3 = readwrite to integer
    1.3 modify propertystorage to change value column type from string to text

  2. Load in Postgres

load database
  from sqlite:///Users/nicolas/BAIKAL/db.sqlite
  into postgresql:///baikal
  with include drop, create tables, create indexes, reset sequences, on error resume next
  CAST type blob to text
  ;

It works :)

nicolas@MacBook-Pro-de-Nicolas:~/BAIKAL$ pgloader db.load
2024-11-04T13:06:24.003361-05:00 LOG pgloader version "3.6.9"
2024-11-04T13:06:24.036862-05:00 LOG Migrating from #<SQLITE-CONNECTION sqlite:///Users/nicolas/BAIKAL/db.sqlite {700BC7D7D3}>
2024-11-04T13:06:24.036942-05:00 LOG Migrating into #<PGSQL-CONNECTION pgsql://nicolas@UNIX:5432/baikal {700BC7D863}>
2024-11-04T13:06:24.232287-05:00 LOG report summary reset
             table name     errors       rows      bytes      total time
-----------------------  ---------  ---------  ---------  --------------
                  fetch          0          0                     0.000s
        fetch meta data          0         38                     0.018s
         Create Schemas          0          0                     0.001s
       Create SQL Types          0          0                     0.002s
          Create tables          0         28                     0.039s
         Set Table OIDs          0         14                     0.007s
-----------------------  ---------  ---------  ---------  --------------
                  users          0          2     0.1 kB          0.012s
      schedulingobjects          0          0                     0.009s
        propertystorage          0          0                     0.016s
             principals          0          2     0.2 kB          0.010s
                  locks          0          0                     0.016s
           groupmembers          0          0                     0.018s
                  cards          0        114    49.1 kB          0.026s
  calendarsubscriptions          0          0                     0.019s
        calendarobjects          0        125   470.6 kB          0.036s
              calendars          0          2     0.0 kB          0.023s
      calendarinstances          0          2     0.2 kB          0.030s
           addressbooks          0          2     0.1 kB          0.032s
        calendarchanges          0        479    26.6 kB          0.025s
     addressbookchanges          0       2202   115.7 kB          0.037s
-----------------------  ---------  ---------  ---------  --------------
COPY Threads Completion          0          4                     0.043s
         Create Indexes          0         24                     0.021s
 Index Build Completion          0         24                     0.018s
        Reset Sequences          0          9                     0.011s
           Primary Keys          0         14                     0.002s
    Create Foreign Keys          0          0                     0.000s
        Create Triggers          0          0                     0.000s
       Install Comments          0          0                     0.000s
-----------------------  ---------  ---------  ---------  --------------
      Total import time          ✓       2930   662.7 kB          0.096s

I've done some tests in Thunderbird (create/update/remove events in calendar, create/update/remove contacts in address book) it works 👍

@leso-kn
Copy link
Contributor Author

leso-kn commented Nov 6, 2024

Oh. I just noticed that this PR actually completely breaks new installs with sqlite... This is kind of bad.

@ByteHamster Oh, sorry for the late reply, I missed that notification. Wow crap, that is kind of bad! Did you already have a look by the time? I should be able to look into it tomorrow

@ByteHamster
Copy link
Member

@leso-kn I did not have a look, so it would be good if you could

@leso-kn leso-kn mentioned this pull request Nov 7, 2024
3 tasks
@leso-kn
Copy link
Contributor Author

leso-kn commented Nov 7, 2024

@ByteHamster Done, see #1302.

Again my apologies for breaking this in the first place! Don't know what I was thinking when I worked on the install page, I had not tested that code at all.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.