PostgreSQL adapter method .tables return table names without schema
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 48/100
Línea de trabajo
Comienza con los métodos delete_tables de database_cleaner/sequel/deletion.rb y tables_to_truncate de database_cleaner/sequel/truncation.rb; después, inspecciona adapters/shared/postgres.rb alrededor del método tables. Verifica que las tablas de varios esquemas se representen con identificadores cualificados por el esquema y que la eliminación o el truncado eliminen los registros de cada esquema listado.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Take a look at #1154 issue of Sequel gem https://github.com/jeremyevans/sequel/issues/1154.
My database consists of multiple schemas with some number of tables with the same name, like this:
Schema | Name | Type | Owner
-----------------+-------------------------+---------+----------
type1 | tasks | table | user
type1 | updates | table | user
type2 | tasks | table | user
type2 | updates | table | user
type3 | tasks | table | user
type3 | updates | table | user
...
I am using database_cleaner (1.5.1) and rspec (3.4.0) for my tests. Database config contains search_path for all the schemas. When I try to clear DB with :deletion method (or :truncate) - it didn't remove any records.
DatabaseCleaner[:sequel, { connection: DB }]
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:deletion)
end
config.around(:each) do |example|
DatabaseCleaner.cleaning do
example.run
end
end
Database contains all the data that was inserted during the tests. I open log files and see this:
I, INFO -- : (0.000349s) ALTER TABLE "updates" DISABLE TRIGGER ALL
I, INFO -- : (0.000444s) ALTER TABLE "tasks" DISABLE TRIGGER ALL
I, INFO -- : (0.000236s) ALTER TABLE "updates" DISABLE TRIGGER ALL
I, INFO -- : (0.000232s) ALTER TABLE "tasks" DISABLE TRIGGER ALL
I, INFO -- : (0.000202s) ALTER TABLE "updates" DISABLE TRIGGER ALL
I, INFO -- : (0.000200s) ALTER TABLE "tasks" DISABLE TRIGGER ALL
....
I, INFO -- : (0.000349s) DELETE FROM "tasks"
I, INFO -- : (0.000444s) DELETE FROM "updates"
I, INFO -- : (0.000249s) DELETE FROM "tasks"
I, INFO -- : (0.000314s) DELETE FROM "updates"
...
As you can see - no schema provided to PSQL, just raw table names. Ok, I open Sequel adapter of database_cleaner and learned how it tries to delete the data from the tables:
# database_cleaner/sequel/deleteion.rb : 30-46
def delete_tables(db, tables) # tables - connection.tables method of Sequel
tables.each do |table|
db[table.to_sym].delete
end
end
# database_cleaner/sequel/truncation.rb : 64-67
def tables_to_truncate(db)
(@only || db.tables.map(&:to_s)) - @tables_to_exclude
end
As we see, db_cleaner gem get tables name with sequel .tables method. Ok, go to Sequel code (adapters/shared/postgres.rb - 525 line of code) and see that tables method return table names WITHOUT schemas.
2.1.7 :004 > DB.tables # DB - sequel connection
=> [:updates, :tasks, :updates, :tasks, :updates, :schema_info, :tasks, :tasks, :tasks, :updates, :tasks, :updates]
Thats why no one record is removed and that is why database_cleaner doesn't remove any data.
For correct removing of the data from the tables with schema database_cleaner gem needs something like this:
[:type1__updates, :type1__tasks, :type2__updates, :type2__tasks, :type3__updates, :type3__tasks ]
Thanks!
- Lenguaje dominante
- Ruby
- Estrellas
- 19
- Forks
- 11
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de DatabaseCleaner/database_cleaner-sequel
-
Dificultad 3/5 1-2 días Aptitud para principiantes 38/100
DatabaseCleaner/database_cleaner-sequel#28 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
DatabaseCleaner/database_cleaner-sequel#23 · 2 reacciones ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 38/100
DatabaseCleaner/database_cleaner-sequel#18 · 4 comentarios · 3 reacciones ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
DatabaseCleaner/database_cleaner-sequel#2 · 5 comentarios · 2 reacciones ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
DatabaseCleaner/database_cleaner-sequel#3 · 3 comentarios ·
Todos los issues de DatabaseCleaner/database_cleaner-sequel
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Please Drop ruby 3.2 support Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
googleapis/google-api-ruby-client#28001 · 5 reacciones ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100