Hi Nicolas,
Thanks for writing about your problem!
In my current installation of LedgerSMB, the tables are in a schema other
than public, because I installed it in a database where there are other
data in schema public. (The reason I did that is that I want to link tables
in schema public and LedgerSMB tables, but I have not done it yet.)
No problem. Your setup *should* be supported. And I remember helping you when you first set up your database with the non-public schema.
I could make it work relatively painlessly with LedgerSMB 1.3 by setting
db_namespace in ledgersmb.conf.
Actually, you should still be able to do that. However, I think the section in which the key resides has changed. Does your ledgersmb.conf have this:
[database]
db_namespace = alternativeschema
?
That is, is your db_namespace in the "database" section of the config file?
Recently (that is, very late!) I wanted to upgrade to LedgerSMB 1.5.24
(not 1.6 because my server is still under Debian stretch). I think I could
upgrade the database correctly with setup.pl, but when running login.pl it
will not work because, according to Postgresql's logs, it insists on trying
to call the stored procedure public.setting_get, which does not exist.
Thanks for this info. I think I found that the module which calls the 'setting_get' (lib/LedgerSMB/PGOld.pm) to be lacking the code to set up the db_namespace. I'm now trying to figure out what the best way is to pass the configuration value to the database call component.
Although I do not know perl, I tried to read the code to understand what
is going on. If I understood well, stored procedures are called by calling
directly or indirectly the perl function call_procedure in module PGObject,
which sets the schema to public when it is not specified. However, module
LedgerSMB also contains a function call_procedure which correctly sets the
schema, so the problem seems to be that sometimes PGObject's call_procedure
is called directly instead of module LedgerSMB's.
That's a completely correct assessment! The component that's missing to pass the argument is lib/LedgerSMB/PGOld.pm.
I do not understand why,
because I do not know what constructs like $self->call_procedure or
__PACKAGE__->call_procedure do, but anyway this is very annoying for me,
because it means that LedgerSMB 1.5 just will not work with db_namespace
set to anything else than public.
Was this problem known? Is it corrected in a later version?
Is it a known problem? No, I wasn't aware of it. (And by extension, it's not fixed in any currently released versions.)
I want to help you by getting this fixed - in a 1.5 release. However, the last two weeks, I've had very little time to work on this project and my family duties due to a major release at $work. Would it be ok for you if we (you and I) were able to work out the complete and correct solution over the coming weeks? (Then, I'd expect you to have a working solution before the end of august.) Or is this currently blocking your $getting_work_done ?
Regards,
--
Bye,
Erik.
Robust and Flexible. No vendor lock-in.