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 / dba / Perguntas / 84739
Accepted
John Powell
John Powell
Asked: 2014-12-10 12:37:34 +0800 CST2014-12-10 12:37:34 +0800 CST 2014-12-10 12:37:34 +0800 CST

Altere a instrução da tabela em espera (por horas, na máquina de desenvolvimento), mas nenhum bloqueio é exibido

  • 772

Eu tenho tentado emitir um simples:

ALTER TABLE tablename ADD COLUMN id_col character varying (30)

type em uma compilação do Postgres 9.1.13 no Debian. O aplicativo ainda está em beta privado, então o volume é baixo, mas algo está bloqueando essa afirmação. Seguindo esta postagem de monitoramento de bloqueio do Postgres e executando a consulta,

SELECT bl.pid        AS blocked_pid,
     a.usename       AS blocked_user,
     kl.pid          AS blocking_pid,
     ka.usename      AS blocking_user,
     a.current_query AS blocked_statement
 FROM  pg_catalog.pg_locks  bl
 JOIN pg_catalog.pg_stat_activity a  ON a.procpid = bl.pid
 JOIN pg_catalog.pg_locks    kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid
 JOIN pg_catalog.pg_stat_activity ka ON ka.procpid = kl.pid
 WHERE NOT bl.granted;

não retorna nenhum resultado.

Se eu correr,

SELECT * FROM pg_stat_activity

tudo o que vejo é a ALTER TABLEdeclaração com waiting = te algumas outras consultas em um estado IDLE.

Eu não sou um DBA, mais um desenvolvedor de banco de dados, então peço desculpas se estou perdendo algo realmente óbvio, mas nunca vi uma situação como esta em uma caixa de desenvolvimento de baixo volume, então não sei como proceder.

postgresql locking
  • 2 2 respostas
  • 5966 Views

2 respostas

  • Voted
  1. Best Answer
    Craig Ringer
    2014-12-10T15:09:01+08:002014-12-10T15:09:01+08:00

    De acordo com as notas fornecidas no wiki para essa consulta, ele mostra apenas bloqueios de nível de linha .

    ALTER TABLEACCESS EXCLUSIVEleva um bloqueio de nível de tabela . Uma ou mais transações manterão bloqueios mais fracos na tabela que impedem ALTER TABLEa aquisição de seu bloqueio.

    Você pode identificar o bloqueio sendo aguardado com algo como:

    select * 
    from pg_stat_activity sa 
    inner join pg_locks lwait on (sa.pid = lwait.pid) 
    where sa.waiting = 't' 
      and sa.query like '%ALTER%' 
      and not lwait.granted;
    

    (altere "sa.pid" para "sa.procpid" na versão 9.1 e anteriores).

    • 4
  2. John Powell
    2014-12-10T15:43:36+08:002014-12-10T15:43:36+08:00

    O problema acabou sendo um processo shp2pgsql que foi executado em um loop em um script de shell na tela que foi concluído com êxito várias horas antes de eu postar esta pergunta. Ele não apareceu em pg_locks, nem em pg_stat_activity, pois é um processo separado, que estava sendo canalizado para o psql. Matar esta janela dentro da tela permitiu que a ALTER TABLEinstrução fosse executada. A declaração em questão era mais ou menos assim:

    for x in $(ls *.shp); do shp2pgsql $x schema_name.table_name | psql db_name; done
    

    Isso é algo que executei literalmente centenas de vezes e nunca vi esse comportamento antes, então ainda não sei por que, mas pelo menos está resolvido.

    • 0

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

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