создание создание роли в базе с нужными правами.
                  
                  
                  0. Открытие транзации (dbTx, err := repo.db.Begin())
                  
                  
                  1. Создаётся роль, возвращаются RETURNING (role_id, name, is_admin);
                  
                  
                  2. Создаётся пермишены, используя: INSERT INTO role_permission(role_id, scope, access)
                  
                  
                  3. Коммит (dbTx.Commit())
                  
                  
                  
                  
                  
                  Проблема:
                  
                  
                  role_id = 0 во время создания пермишенов (шаг 2), т.к. коммит идёт только только в конце функции, и роль по факта не создана. Вопрос, как можно "создать" роль внутри транзации без коммита?
                  
                  
                  
                  
                  
                  Пакедж github.com/jmoiron/sqlx
                  
                  
                
role_id autoincrement?
 ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Сейчас проверю на всякий
 ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Да, serial4
А почему не хотите в разных коммитах сделать?
 ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Можно и в разных, просто хотел узнать можно ли в одной
Выходит, что можно https://stackoverflow.com/questions/40675365/get-back-newly-inserted-row-in-postgres-with-sqlx/56787271#56787271
 ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Супер, спасибо большое ) Пошёл читать
Поскольку у вас autoincrement, то похоже нельзя за один коммит сделать. Нужно у профи спросить🧚
Скорее всего, что в одной нельзя. У тебя же сама БД подставляет значение. А запросы идут после коммита
 ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Да, думаю вы правы, спасибо )
 ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          ShiroNoHaga
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Просто пришёл из питона и там использовал sqlalchemy, а там есть session.flush(), который обновляет объекты в транзакции. Но сейчас смотрю что они используют подтранзацию и что-то ещё мутят, так что да, за один запрос точно не получатся
Обсуждают сегодня