2021-01-14 14:40:21 -06:00
|
|
|
|
2021-01-23 17:06:20 -06:00
|
|
|
.. highlight:: sh
|
|
|
|
|
2021-01-14 14:40:21 -06:00
|
|
|
Extending the Schema
|
|
|
|
====================
|
|
|
|
|
|
|
|
While the core Rattail schema provides "most" tables you may need, it is quite
|
|
|
|
common for an app to need yet more tables to satisfy its features.
|
|
|
|
|
|
|
|
Extending the schema really just means, you can add extra tables as needed, and
|
|
|
|
modify the schema for each of those going forward. The core tables provided by
|
|
|
|
Rattail schema should never be directly modified, but your extra tables are
|
|
|
|
fair game.
|
|
|
|
|
|
|
|
It is important that you name all extra tables with a prefix unique to your
|
|
|
|
app, e.g. ``poser_product`` for a product extension table, or ``poser_widget``
|
|
|
|
for a totally custom table. Avoid prefix-less names like ``widget`` because
|
|
|
|
Rattail reserves the prefix-less namespace for its core schema. Also, certain
|
|
|
|
integration packages reserve other namespaces (e.g. ``corepos_`` prefix is used
|
|
|
|
by the rattail-corepos package for extension tables it provides).
|
|
|
|
|
2021-01-23 17:06:20 -06:00
|
|
|
|
|
|
|
First Alembic Version
|
|
|
|
---------------------
|
|
|
|
|
2024-08-27 19:59:08 -05:00
|
|
|
(For more authoritative docs see :ref:`alembic:multiple_bases`.)
|
|
|
|
|
2021-01-23 17:06:20 -06:00
|
|
|
In order to add custom extensions to the schema, you will need to establish
|
|
|
|
some things for sake of Alembic. Note that these steps are only required for
|
|
|
|
the "first" extension you add; subsequent versions are somewhat simpler and are
|
|
|
|
covered in the next section.
|
|
|
|
|
|
|
|
First you should have the basic folder structure::
|
|
|
|
|
|
|
|
cd ~/src/poser
|
|
|
|
mkdir -p poser/db/alembic/versions
|
|
|
|
|
|
|
|
You must edit your config file at ``/srv/envs/poser/app/rattail.conf`` and
|
|
|
|
update the ``version_locations`` setting for Alembic, to include your new
|
|
|
|
folder. Note the way we specify the path below; this ensures it works no
|
|
|
|
matter where things actually live on disk. Also note that we specify the
|
|
|
|
custom location first, core rattail goes last.
|
|
|
|
|
|
|
|
.. code-block:: ini
|
|
|
|
|
|
|
|
[alembic]
|
|
|
|
script_location = rattail.db:alembic
|
|
|
|
version_locations = poser.db:alembic/versions rattail.db:alembic/versions
|
|
|
|
|
2024-08-27 19:59:08 -05:00
|
|
|
Run a command like this (replacing names etc. as needed) to generate
|
|
|
|
the script in your versions folder. Please pay close attention and
|
|
|
|
make sure you have all args correct::
|
2021-01-23 17:06:20 -06:00
|
|
|
|
|
|
|
cd /srv/envs/poser
|
2024-08-27 19:59:08 -05:00
|
|
|
bin/alembic -c app/rattail.conf revision --autogenerate --head base --branch-label=poser --version-path ~/src/poser/poser/db/alembic/versions/ -m 'initial Poser tables'
|
2021-01-23 17:06:20 -06:00
|
|
|
|
|
|
|
If all goes well that command output should end by telling you where the new
|
|
|
|
script lives. You will want to review this of course, to make sure it includes
|
|
|
|
all your new tables.
|
|
|
|
|
|
|
|
And with all that in place, you can apply the migration to your DB (this part
|
|
|
|
is normal)::
|
|
|
|
|
|
|
|
cd /srv/envs/poser
|
|
|
|
bin/alembic -c app/rattail.conf upgrade heads
|
|
|
|
|
|
|
|
|
|
|
|
Additional Alembic Versions
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
TODO
|