AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-173231

ZiiMakc's questions

Martin Hope
ZiiMakc
Asked: 2024-04-06 19:51:32 +0800 CST

Como evitar deadlocks no banco de dados?

  • 5

Digamos que temos duas tabelas usere book.

No nível do aplicativo, para garantir a integridade dos dados e evitar condições de corrida, bloqueamos a entidade no início da transação.

Questão 1:

Digamos que no nível do aplicativo temos duas solicitações em execução ao mesmo tempo:

Solicitação 1 (nível do aplicativo):

start trx
lock for update user with id 1
lock for update book with id 2
do changes
commit

Solicitação 2 (nível do aplicativo):

start trx
lock for update book with id 2
lock for update user with id 1
do changes
commit

Pode acontecer que ambos os primeiros bloqueios da solicitação sejam aplicados antes dos segundos bloqueios, solicitação de 1 bloqueio do usuário 1 e solicitação de 2 bloqueios do livro 2, o que resultará em bloqueio morto.

Como podemos evitar isso? Minha única idéia é escrever em algum lugar uma ordem de bloqueio para todas as tabelas user->booke garantir que a sigamos.

Questão 2:

Se fizermos duas consultas como essa em solicitações diferentes para bloquear entidades antes da mutação

  • Solicitação 1SELECT * FROM user WHERE id IN [1,2] FOR UPDATE
  • Solicitação 2SELECT * FROM user WHERE id IN [2,1] FOR UPDATE

Isso pode resultar em impasse? Por exemplo, se UMA consulta por algum motivo bloquear o usuário 1 primeiro e depois mudar para a solicitação 2 e depois voltar para bloquear o usuário 2.

postgresql
  • 2 respostas
  • 36 Views
Martin Hope
ZiiMakc
Asked: 2023-11-17 04:27:22 +0800 CST

Design de banco de dados, relação um para um dividida em várias tabelas

  • 7

Vamos supor que temos o seguinte banco de dados:

insira a descrição da imagem aqui

Ou no formato pseudo sql (todas as colunas não são nulas):

create table road (
  id int PK
) 
create table item_on_road (
  id int PK
  road_id int FK road.id
  position_order int
  UNIQUE (road_id, position_order)
)
create table rock (
  id int PK FK item_on_road.id
  size float
)
// and so on

Temos um roadno qual podemos viajar em uma direção.

Ao longo da estrada podemos encontrar coisas diferentes item_on_roadpara encontrá-las position_ordercomo1,2,3

As coisas que encontramos na estrada podem ser diferentes, de signa gas_station.

Agora gostaria de fazer uma pergunta:

  1. Este design de banco de dados corresponde às formas normais do 1º ao 5º banco de dados? Eu diria que não, porque podemos criar item_on_roadentradas sem correspondênciarock

  2. Se não corresponder à 5ª forma normal, como fazer?

Perguntas opcionais:

  1. Se a resposta a uma pergunta for sim, como garantir a existência do rockcaso item_on_roadcriado?

  2. Se a resposta a uma pergunta for sim, como garantir que não podemos criar rocke signapontar para o mesmo ID?

mysql
  • 1 respostas
  • 47 Views
Martin Hope
ZiiMakc
Asked: 2023-07-24 02:24:39 +0800 CST

Como impor a existência da entidade em N-tables - postgres

  • 6

Digamos que decidimos dividir usera tabela em duas, uma terá dados relacionados à autenticação, outra descrição básica do usuário:

   user_table
user_id | name
1       | Max
2       | Alex
3       | Should not be possible
   auth_table
user_id | email   | password
1       | [email protected] | 123
2       | [email protected] | 321
4       | [email protected] | Should not be possible

É possível impor a existência do mesmo user_id? Basicamente, ambas as tabelas devem ter exatamente o mesmo número de linhas e cada linha deve ter uma correspondência em ambas as tabelas.

postgresql
  • 2 respostas
  • 29 Views
Martin Hope
ZiiMakc
Asked: 2019-06-04 11:08:34 +0800 CST

Tabela em loop do Postgres (iniciar a sequência de 1 e reescrever as linhas antigas)

  • 0

Eu quero que a tabela contenha logs e seja em loop, então, quando chegar a última chave na sequência, ela começará de um e reescreverá os logs antigos.

Eu posso fazer isso se eu marcar a sequência como ciclo e fizer solicitações assim:

INSERT INTO logs (initiator_id, target_id, action, message) VALUES ($1, $2, $3, $4)
ON CONFLICT (id) DO UPDATE SET target_id=$2, initiator_id=$1, action=$3, message=$4;

O que eu não gosto, é que eu preciso repetir as mesmas inserções se houver conflito (linha 2)

O que estou curioso, é uma boa maneira de fazer, ou há outras maneiras mais práticas para tabelas que você precisa limpar, digamos, a cada 3 montagens?

Ou talvez haja uma maneira de gerar id exclusivo sem usar sequências?

Por enquanto eu decidi fazer 2 colunas de chave primária (data, initiator_id) como log é sempre 1 ação de cada vez.

postgresql
  • 1 respostas
  • 60 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve