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-271541

Sergey Zolotarev's questions

Martin Hope
Sergey Zolotarev
Asked: 2025-03-26 18:39:53 +0800 CST

O Postgres aborta transações em caso de erro (precisa de referência)?

  • 5

O Postgres aborta transações atuais em caso de erro? Em qualquer caso, você pode fornecer uma referência?

Pesquisar no Google "site:postgres.org transaction abort rollback error" não produziu resultados, e o GPT tem alucinações.

Encontrei essa afirmação no StackOverflow, mas ela não é apoiada por nada.

O Postgres aborta automaticamente as transações sempre que qualquer instrução SQL termina com um erro

Como posso dizer ao PostgreSQL para não abortar a transação inteira quando uma única restrição falhar?

Também encontrei isto . É semelhante, mas diferente, pois não lanço exceções (além disso, esse "normalmente" o torna confuso).

A opção level especifica a gravidade do erro. Os níveis permitidos são DEBUG, LOG, INFO, NOTICE, WARNING e EXCEPTION, com EXCEPTION sendo o padrão. EXCEPTION gera um erro (que normalmente aborta a transação atual ); os outros níveis geram apenas mensagens de diferentes níveis de prioridade. Se mensagens de uma prioridade específica são reportadas ao cliente, gravadas no log do servidor ou ambas, é controlado pelas variáveis ​​de configuração log_min_messages e client_min_messages. Veja o Capítulo 19 para mais informações.

postgresql
  • 3 respostas
  • 48 Views
Martin Hope
Sergey Zolotarev
Asked: 2025-02-26 20:04:41 +0800 CST

Nenhuma conversão de tipo implícita com WHEN

  • 8

Nosso aplicativo às vezes precisa criar consultas SQL dinamicamente, incluindo ORDER BYcláusulas semelhantes a esta:

ORDER BY CASE t.ID
    WHEN 895 THEN 1
    WHEN 643 THEN 2
END

O problema t.IDgeralmente se refere a NUMBERcolunas — mas raramente se refere a VARCHARcolunas (dependendo da tabela, que é, para lembrar, dinâmica).

Quando isso acontece, recebemos um erro como este (abaixo está a versão localizada, mas é fácil de descobrir):

Erro SQL [932] [42000]: ORA-00932: Não há tipos de dados: ожидается CHAR, получено NUMBER

Embora nosso RDBMS possa executar conversão implícita de tipo , aparentemente não funciona com WHEN(por algum motivo). Não encontrei nenhuma menção a isso nos documentos (você é bem-vindo para fornecer tal referência).

Aqui estão os scripts de reprodução (o exemplo é reconhecidamente rebuscado):

create table "user"(
  id VARCHAR(50),
  name VARCHAR(50)
);
insert into "user"
values ('1', 'John Doe'),
  ('2', 'John Roe'),
('3', 'Jane Doe');
select * from "user"
order by case id
  when 1 then 1
  when 2 then 2
end;

Substitua o último script por este para que funcione

select * from "user"
order by case id
  when '1' then 1
  when '2' then 2
end;

Qual é a sua recomendação¹?

Oracle DB, Postgres (usamos ambos).

¹ Além de "nunca confie na conversão implícita de tipos"

postgresql
  • 3 respostas
  • 275 Views
Martin Hope
Sergey Zolotarev
Asked: 2023-11-05 19:23:30 +0800 CST

Qual é a diferença entre FETCH FIRST e FETCH NEXT no PostgreSQL?

  • 7

Qual é a diferença entre FETCH FIRSTe FETCH NEXTno PostgreSQL? Os documentos simplesmente dizem

NEXT Busca a próxima linha

FIRST Busque a primeira linha da consulta

o que não é muita explicação. Criei uma tabela de amostra com linhas de amostra, executada

SELECT * from users
FETCH FIRST 2 ROWS ONLY;
SELECT * from users
FETCH NEXT 2 ROWS ONLY;

e obteve exatamente a mesma saída. É quase como se FETCH FIRSTe FETCH NEXTfossem apenas sinônimos de LIMIT(que, pelo que li, não faz parte do padrão SQL, ao contrário do FETCH [FIRST|NEXT])

Se os dois são iguais, por que a documentação não diz isso? Ou existem algumas diferenças, afinal?

Esta resposta do Stack Overflow implica que eles podem funcionar da mesma maneira em pelo menos alguns RDBMSes, especificamente no MS Server

postgresql
  • 1 respostas
  • 103 Views
Martin Hope
Sergey Zolotarev
Asked: 2023-04-16 05:24:54 +0800 CST

Como preencher uma tabela de junção com uma instrução SQL no MySQL?

  • 5

eu tenho essas mesas

CREATE TABLE users
(
    id         INT          NOT NULL AUTO_INCREMENT,
    username   VARCHAR(15)  NOT NULL UNIQUE,
    password   VARCHAR(200) NOT NULL,
    name       VARCHAR(15)  NOT NULL,
    last_name  VARCHAR(25)  NOT NULL,
    department VARCHAR(50)  NOT NULL,
    salary     INT,
    age        TINYINT      NOT NULL,
    email      VARCHAR(50),
    enabled    TINYINT      NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE roles
(
    id   INT         NOT NULL AUTO_INCREMENT,
    role VARCHAR(15) NOT NULL UNIQUE,
    PRIMARY KEY (id)
);

e também uma tabela de junção entre eles

CREATE TABLE user_role
(
    user_id  INT         NOT NULL,
    username VARCHAR(15) NOT NULL,
    role_id  INT         NOT NULL,
    role     VARCHAR(15) NOT NULL,
    PRIMARY KEY (user_id, role_id),
    FOREIGN KEY (user_id) REFERENCES users (id),
    FOREIGN KEY (role_id) REFERENCES roles (id)
);

Como posso preenchê-lo com uma instrução SQL?

Suponha que a userstabela tenha esses valores (os ids são gerados automaticamente)

VALUES ('mickey_m', '$2y$10$i5SJc2KAriHGn7Dz2rRQHuQ3JfBxlzMaPVKP1YdEJCukryDY9NbVC',
        'Mickey', 'Mouse', 'sales', 180000, 95, '[email protected]', 1),

       ('donald_d', '$2y$10$E6SHpAN0aZGQ43HAO.TPiO27kDKXOGIgDc8xWDJdl2Prn2wzQzz5y',
       'Donald', 'Duck', 'information technology', 190000, 89, '[email protected]', 1),

       ('scrooge_m', '$2a$10$ycVpl2BSD6o19wa3xXtmrOxc8qZjwoIk.e3oZqgQBOE.3NHANAYqa',
       'Scrooge', 'McDuck', 'board of directors', 700000, 76, '[email protected]', 1)

E suponha que eu queira que todos tenham um USERpapel e scrooge_mtambém tenham um ADMINpapel. A tabela de junção deve ser mais ou menos assim (mais ids que talvez eu não saiba no momento de escrever a instrução SQL)

ID do usuário nome de usuário role_id papel
mickey_m DO UTILIZADOR
donald_d DO UTILIZADOR
scrooge_m DO UTILIZADOR
scrooge_m ADMINISTRADOR

Minha tentativa aparentemente ruim está abaixo (não testei, mas parece errado – embora o IDE não destaque nada aqui). Eu costumava INSERT IGNOREcontar com a possibilidade de que as linhas já estivessem lá

INSERT IGNORE INTO user_role
WITH user_to_role(user, role) AS ( VALUES ROW('mickey_m', 'USER'),
                              ROW('donald_d', 'USER'),
                              ROW('scrooge_m', 'USER'),
                              ROW('scrooge_m', 'ADMIN')
SELECT users.id, users.username, roles.id, roles.role FROM users JOIN
    roles ON users.username = user_to_role.user AND roles.role = user_to_role.role;

Quando eu executo no dbfiddle , recebo

Unknown column 'user_to_role.user' in 'on clause'
mysql
  • 2 respostas
  • 77 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