We have a SAAS platform written in Rails using the postgres' schema based multitenancy and Apartment gem. The different schemas are identical, with same number of tables and same columns in each table. We want to migrate to foreign key based multitenant system where we want to merge all the records from different schemas into a single schema, identifying each record with a tenant_id. What is the proper way of merging all the records from the different schemas, and preserving the foreign key relationships.
What is the proper way of merging multiple postgres schemas into a single schema preserving the foreign key relationships?
323 views Asked by Abhishek Bhatta At
1
There are 1 answers
Related Questions in RUBY-ON-RAILS
- How to display legend box in tooltip text for amCharts 5 in Rails application?
- how to integrate cashfree payment gateway in ruby on rails project
- RSpec Capybara throwing Selenium error when trying to click a button with browser confirm
- rails minitest not picking up fixture properly, instance variable not percolating
- Duplicate GET requests - Rails & Heroku
- How to stub out current_user in JWT model for Rspec?
- NameError in Home#index
- Verifying Google Identity OAuth2 token with Ruby
- Error WebMock::NetConnectNotAllowedError in testing with stub using minitest in rails (using Faraday)
- why is mission_control-jobs erroring with load path error?
- Rescuing validation errors from a polymorphic association
- New error on random number assigned to local variable , Rails
- How to fix error in model with gem lockbox
- Images uploaded via Active Storage not displaying in Active Admin or on certain devices
- controller test_methods generating two errors intermittently
Related Questions in POSTGRESQL
- Only the first SQL script gets executed inside Docker Postgres container
- Compare fields in two tables
- Hibernate ClobJdbcType bindings: what are the diferences?
- Postgres && statement Error in Mybatis Mapper?
- Can this query be optimized? (Choosing a random row to insert, that excludes previously inserted Rows)
- Connection terminated unexpectedly while performing multi row insert using pg-promise
- Processing multiple forms in nodejs and postgresql
- How to copy data from SQLite to postgreSQL?
- PGAdmin4 configured behind a reverse proxy but unable to connect to Postgresql server
- Updates to pgsodium encrypted values don't use specified key_id
- Connecting to Postgres running in a Docker container using psql
- Can't connect to local postgresql server from my docker container
- Django Arrayfield migration to cloud sql (Postgresql) not creating the column
- Get list of matching keywords for each post
- docker-compose can't reset postgresql database
Related Questions in MULTI-TENANT
- How would single sign-on work for my multi-tenant application?
- Finbuckel per tenant authenication using JWT
- Spring Boot Multi-Tenant : impossible to set different tenants
- Make Saleor multitenant
- Share Authetication/Authorization between multitenant Azure Web App and Web Job
- Entra multitenant collaboration
- Overriding Connection Logic in Hyn Multi-tenancy Package (v5.9) for Laravel
- Issue of "IllegalArgumentException: Not a managed type: MyEntity" for native image using spring boot 3
- Deploy from Azure Devops into someone else’s tenant
- Support for multi tenancy in SpringBoot 3 native image
- multiple azure chatbots doesn't authenticate
- Passing headers to Otel Gateway collector from nginx
- Issue with Spatie Laravel Multitenancy: Table 'laravel.users' doesn't exist (Still using the landlord instead of tenant)
- Tenancy For Laravel package not syncing resources between tenants
- Ofbiz multi-tenancy configuration
Related Questions in APARTMENT-GEM
- ActiveStorage with Apartment gem only checks public schema to load files instead of tenant schema
- Rake task to migrate tenants on their schema's on multiple darabases
- Migrating record to non multi tenant database to multi tenant database
- Rails sunspot reindexing specific schema
- ActiveRecord Query replaces id with null
- How to redirect user to a page with different subdomain after sign_in/sign_out devise?
- Using Ros Apartment gem with ruby 3.0.0
- Rails/Multitenancy - How to transfer data from one account to another when using Apartment gem?
- Rails: How to modify data using migrations due to change in the schema
- How can I ensure Sidekiq background jobs run against the same database they were initiated from
- Setting up comfy cms fails with multi-tenancy app
- How do I lazy-load a config from an initializer?
- GitHub Codespaces subdomain
- Rails - copy a Table from one schema to another schema in same database
- Making a request to an ActiveStorage resource fails occasionally when used alongside Apartment gem
Related Questions in ACTS-AS-TENANT
- Devise: subdomain redirect after login
- Best way to use acts_as_tenant with blueprinter gem
- Acts_as_tenant, cached data for different tenants?
- How to configure acts_as_tenant gem with ActionCable in rails7
- Multitenancy (Acts as Tenant gem): How to delete a tenant?
- Rails Devise NoMethodError in Users::RegistrationsController#create undefined method `each_with_index' for #<Venue:0x00007fadb5270398>
- Citus "create_distributed_table" giving "PG::UndefinedColumn"
- Set Multi Tenant in Active Admin Controllers (required for Searchkick index)
- What is the proper way of merging multiple postgres schemas into a single schema preserving the foreign key relationships?
- Tweaking scoping rules as part of acts_as_tenant?
- activerecord-multi-tenant / acts_as_tenant and Active Admin
- Rails: Devise and acts_as_tenant registration process
- Rails 5 Using Devise and acts_as_tenant
- Model with acts_as_tenant fails validation after Rails 5 update
- Separate log file for each tenant
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
This is a situation that will need care. I think (I could be wrong) that the best approach is to add to all tables
tenant_idandoriginal_id... before attempting migration populateoriginal_idin all tables withidof that record. Essentially this is to have a record of what the value ofidwas before the merging.After merge you can then run a rake task that rebuilds the associations. So if you had...
Your migration script would do (after migration)
You'd need to do something similar for every relation, so it's a bit of a slog.
Hopefully, someone else will come up with a better solution.
NOTE THIS IS NOT IDEMPOTENT. If it errors, you can't restart it except by redoing the merging completely.