【问题标题】:Every other query fails with syntax error其他所有查询都因语法错误而失败
【发布时间】:2020-05-02 20:34:03
【问题描述】:

我使用 CockroachDb 和 Npgsql 驱动程序。

我有一个简单的用户表。当我插入新记录时,所有其他查询都因语法错误而失败,这对我来说似乎很奇怪。

CREATE TABLE Users (
    RequestIdentifier BYTEA NOT NULL UNIQUE,
    Identifier UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    Id INT8 NOT NULL DEFAULT unique_rowid(),
    Email BYTEA NOT NULL UNIQUE,
    Username BYTEA NOT NULL,
    PasswordHash BYTEA NOT NULL
);
var q = @"
    INSERT INTO Users (RequestIdentifier, Email, Username, PasswordHash)
    VALUES (@RequestIdentifier, @Email, @Username, @PasswordHash)
    ON CONFLICT (RequestIdentifier)
    DO NOTHING
    RETURNING Identifier
";

byte[] userIdentifier = null;
using (var cmd = new NpgsqlCommand(q, dbConn)) {
    cmd.Parameters.Add("RequestIdentifier", NpgsqlDbType.Bytea);
    cmd.Parameters.Add("Email", NpgsqlDbType.Bytea);
    cmd.Parameters.Add("Username", NpgsqlDbType.Bytea);
    cmd.Parameters.Add("PasswordHash", NpgsqlDbType.Bytea);

    await cmd.PrepareAsync();

    cmd.Parameters[0].Value = msg.RequestIdentifier;
    cmd.Parameters[1].Value = msg.Email;
    cmd.Parameters[2].Value = msg.Username;
    cmd.Parameters[3].Value = passwordHash;

    try {
        userIdentifier = ((Guid) await cmd.ExecuteScalarAsync()).ToByteArray();
    } catch (PostgresException e) when (e.SqlState == SqlErrorCodes.UniqueViolation) {
        logger.Information("Email {Email} already in use", UTF8.GetString(msg.Email));
    } catch (PostgresException e) {
        logger.Error("{Exception}", e);
        throw;
    }
}
Npgsql.PostgresException (0x80004005): 42601: at or near "close": syntax error
   at Npgsql.NpgsqlConnector.<>c__DisplayClass160_0.<<DoReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlConnector.<>c__DisplayClass160_0.<<DoReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlConnector.<>c__DisplayClass160_0.<<DoReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming)
   at Npgsql.NpgsqlCommand.ExecuteReaderAsync(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)
   at Npgsql.NpgsqlCommand.ExecuteScalar(Boolean async, CancellationToken cancellationToken)
   at OwlAuthentication.Services.CockroachDbStorageService.CreateOrRetrieveExistingUser(SignUpMessage msg) in C:\Users\Che Khen Kho\Desktop\dotnet\OwlAuthentication\Services\CockroachDbStorageService.cs:line 94
  Exception data:
    Severity: ERROR
    SqlState: 42601
    MessageText: at or near "close": syntax error
    Detail: source SQL:
CLOSE ALL
^
    File: lexer.go
    Line: 175
    Routine: Error

如果我尝试 10 个查询,其中 5 个会因此异常而失败,但实际上插入的行通常超过 5 行(有时是 6 个,有时是 8 个,等等)。

我也使用 PostgreSQL 对其进行了测试(使用 uuid_generate_v4 而不是 gen_random_uuid 和 BIGSERIAL 作为 Id 列),一切正常。

【问题讨论】:

    标签: npgsql cockroachdb


    【解决方案1】:

    我认为此问题 (https://github.com/cockroachdb/cockroach/issues/45490) 已涵盖此问题,该问题已在 CockroachDB v20.1 中修复

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 2018-09-05
      • 2017-06-14
      相关资源
      最近更新 更多