标签: npgsql

如何设置Npgsql的超时值?

我习惯CommandTimeout=5设置超时,但不行。

这是我的代码:

Dim con As New NpgsqlConnection
        Dim cmd As New NpgsqlCommand
        Dim conStr As String
        Try
            Dim sql = "Select * from dat_extract_text a join dat_replace_text b on a.tm_id=b.tm_id 
join dat_base_text_dt c on c.tm_id=a.tm_id
join dat_base_text_dt_font d on d.tm_id=c.tm_id
limit 250000"
            conStr = "Server=192.168.1.10;Port=5434;UserId=testuser;Password=1234;Database=testdb;CommandTimeout=5;"
            con.ConnectionString = conStr
            con.Open()

            cmd.Connection = con
            cmd.CommandText = sql

            Dim st = DateTime.Now
            Dim rs = cmd.ExecuteNonQuery
            Dim et = DateTime.Now
            Dim t = (et - st).TotalSeconds           
        Catch ex As Exception
        End …
Run Code Online (Sandbox Code Playgroud)

vb.net postgresql npgsql

5
推荐指数
1
解决办法
1万
查看次数

C# 枚举到 postgres 枚举

我目前正在使用 postgres 枚举

CREATE TYPE http_action_enum AS ENUM ('GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH');
CREATE TABLE IF NOT EXISTS response
(
    id                          UUID                PRIMARY KEY,
    http_action                 http_action_enum    NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

但是当我使用 ef 框架插入 postgres 数据库时,我不断遇到以下错误:

Exception data:
Severity: ERROR
SqlState: 42804
MessageText: column "destination" is of type source_dest_enum but expression is of type integer
Hint: You will need to rewrite or cast the expression.
Run Code Online (Sandbox Code Playgroud)

当我检查响应数据类型时,它实际上是正确的枚举而不是整数。

存储库.cs

public async Task<Response> InsertRecord(Response response, CancellationToken cancellationToken)
{
      await dBContext.response.AddAsync(response, cancellationToken).ConfigureAwait(true); …
Run Code Online (Sandbox Code Playgroud)

c# postgresql enums npgsql

5
推荐指数
1
解决办法
1万
查看次数

Npgsql与.net core web api中的ssl证书连接

我正在使用 NpgSqlConnection for .net core Web api 项目。当前的 PostgreSQL 服务器已移动到另一台服务器,需要使用客户端证书进行连接。我们提供了 3 个证书文件,分别名为 client-cert.pem、client-key.pem 和 server-ca.pem。我能够通过浏览器中的 pgAdmin 使用客户端证书和密钥文件连接到服务器。但是,我无法从我的代码进行连接。尝试了网上的几种方法,但仍然出现以下错误。

{“28000:连接需要有效的客户端证书”}

我正在尝试的代码片段如下所示。

var connectionString = "User ID=" + _dOptions.Value.AuthenticationCredentials.UserName
               + ";Password=" + _dOptions.Value.AuthenticationCredentials.PassWord
               + ";Server=" + _dOptions.Value.Server
               + ";Port=" + _dOptions.Value.Port.ToString()
               + ";Database=" + _dOptions.Value.Database
               + ";Integrated Security=true;Pooling=true;SSL Mode=Require;Trust Server Certificate=true";

_con = new NpgsqlConnection(connectionString);
_con.ProvideClientCertificatesCallback += new ProvideClientCertificatesCallback(MyClientCertificates);
Run Code Online (Sandbox Code Playgroud)
private void MyClientCertificates(X509CertificateCollection certificates)
{
      var cert = new X509Certificate("C:\\Users\\c-Anish\\Documents\\cloud_sql_replica_certs\\DEV\\client-cert.pem");
      certificates.Add(cert);
}
Run Code Online (Sandbox Code Playgroud)

另外,这里我们仅使用名为 client-cert.pem 的客户端证书,但是,我认为我们可能需要使用 client-key.pem ?如果是这样,我该如何添加?我在这里缺少什么?

任何帮助将不胜感激,因为我一直在解决这个问题。

c# postgresql ssl-certificate npgsql .net-core

5
推荐指数
1
解决办法
4651
查看次数

ASP.NET Core 6 MVC - EF Core 6 - 模型未正确验证

我目前正在尝试使用 ASP.NET Core 6 MVC 和 Entity Framework Core 6 和 npgsql 启动一个新项目。

\n

当我尝试添加一个具有外国身份的实体时ModelState.IsValid不断返回 false - 因为模型不会扩展外国实体。

\n

基本上我遵循了官方文档:

\n\n

所以我的课程看起来像:

\n
namespace PV.Models\n{\n    public class Fakultaet\n    {\n        [Key]\n        public int FakultaetID { get; set; }\n        [Required]\n        public string FakuName { get; set; }\n    }\n\n    public class Studiengang\n    {\n        [Key]\n        public int StudiengangID { get; set; }\n        [Required]\n        public string StudiengangName { get; set;}\n        [Required,ForeignKey("Fakultaet")]\n        public int FakultaetID { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# npgsql entity-framework-core asp.net-core

5
推荐指数
1
解决办法
5105
查看次数

RavenDB ETL 到 SQL,如何将整个文档('this')存储在 jsonb 列中?

在 RavenDB 5.4+ 中,我想使用 Raven 的 Npgsql 内置工厂配置一个SQL ETL 任务,将数据卸载到 PostgreSQL 数据库。我遇到的问题是我希望将整个文档 ( this) 存储在jsonb数据列中。

问题:如何实现将整个文档(例如this下面的 ETL 转换示例中的)存储到 Postgres?
我的目标是不必Foo手动指定对象的字段/列。

Postgres 表示例:

create table public.foo
(
    id   text,
    data jsonb
);
Run Code Online (Sandbox Code Playgroud)

RavenDB 中的 ETL 转换脚本示例:

loadToFoo ({
    id: id(this),
    data: this // <-- the issue
});
Run Code Online (Sandbox Code Playgroud)

这会导致异常:

Npgsql.PostgresException (0x80004005): 42804: 列“data”的类型为 jsonb,但表达式的类型为文本

我尝试过以下替代方案:

data: JSON.parse(this)

Error: 
    System.ArgumentException: Expected string but got Symbol
---
data: JSON.stringify(this)

Error:
    Npgsql.PostgresException (0x80004005): 42804: column "data" …
Run Code Online (Sandbox Code Playgroud)

c# postgresql npgsql jint ravendb

5
推荐指数
1
解决办法
127
查看次数

Postgres bytea列返回字符串(char数组)而不是字节数组

我一直在使用C#为不同数据库的产品编写具体的提供程序实现.W/out进入细节,其中一列是字节数组类型(postgres中的bytea - 由于首选项bytea是在blob上选择的).唯一的问题是,它不会返回插入的相同值.当我插入Int32("0")时,我得到8 [92和8x 48](而不是[0,0,0,0]).我需要一个性能明智的解决方案,它将返回我插入的纯字节,而不是8个字节上的值"0"的ASCII表示.

我正在使用Npgsql来检索数据.如果有人知道c#的解决方案,我也很乐意学习它.

编辑: Postgres 9.0,.Net 3.5

简单化

命令查询: - 内部只执行插入语句

select InsertOrUpdateEntry(:nodeId, :timeStamp, :data)
Run Code Online (Sandbox Code Playgroud)

数据参数:

byte [] value = BitConverter.GetBytes((int)someValue);
Run Code Online (Sandbox Code Playgroud)

参数分配如下

command.Parameters.Add(new NpgsqlParameter("data", NpgsqlDbType.Bytea) 
{ Value = value });
Run Code Online (Sandbox Code Playgroud)

选择陈述:

select * from Entries
Run Code Online (Sandbox Code Playgroud)

我输入的字节数组相同,我想回去.我将衷心感谢您的帮助.

输入:0 0 0 0
电流输出:92 48 48 48 48 48 48 48 48
预期输出:0 0 0 0

c# postgresql bytearray binary-data npgsql

4
推荐指数
1
解决办法
1万
查看次数

npgsql和Entity Framework代码首先设置问题

我得到的最新错误是

ERROR: 42P01: relation "dbo.__MigrationHistory" does not exist
Run Code Online (Sandbox Code Playgroud)

但我确信这只是因为早先没有正确设置.

我目前正在尝试设置实体框架4.4代码首先使用Npgsql 2.0.12,我已经完成了以下操作,它似乎至少现在连接到数据库,但是当我做context.saveChanges()时给我上面的错误;

  • 更新了.net 2.0.50727的machine.config;

    <add name ="Npgsql Data Provider"invariant ="Npgsql"support ="FF"description =".Postgresql Server的Ne​​t Framework数据提供程序"type ="Npgsql.NpgsqlFactory,Npgsql,Version = 2.0.12.0,Culture = neutral, PublicKeyToken = 5d8b90d52f46fda7"/>

  • 将dll添加到项目中

  • 将app.config更改为如下所示;

    <configuration>
      <configSections>
        <section name="entityFramework"
          type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,
          EntityFramework, 
          Version=4.4.0.0, Culture=neutral, 
          PublicKeyToken=b77a5c561934e089" 
          requirePermission="false" />
      </configSections>
      <system.data>
        <DbProviderFactories>
          <remove invariant="Npgsql"></remove>
          <add name="Npgsql Data Provider" 
               invariant="Npgsql" 
               description=".Net Framework Data Provider for Postgresql Server" 
               type="Npgsql.NpgsqlFactory, Npgsql, 
                     Version=2.0.12.0, Culture=neutral, 
                     PublicKeyToken=5d8b90d52f46fda7" />
        </DbProviderFactories>
      </system.data>
      <connectionStrings>
        <add name="DataContext" 
             connectionString="Server=127.0.0.1;Port=5432;Database=postgres;User Id=postgres;Password=*******;CommandTimeout=20;" 
             providerName="Npgsql" />
      </connectionStrings>
    </configuration>
    
    Run Code Online (Sandbox Code Playgroud)
  • 传入的数据如下所示

    public …

c# entity-framework npgsql ef-code-first

4
推荐指数
2
解决办法
1万
查看次数

如何在NpgSql连接字符串中指定ApplicationName

是否可以在NpgSql连接字符串中指定ApplicationName?以下资源通常有帮助,但在这种情况下它什么也没说:Npgsql连接字符串

postgresql ado.net npgsql c#-4.0

4
推荐指数
1
解决办法
4033
查看次数

PostgreSQL错误:EXECUTE的查询字符串参数为null

我有一个名为带有触发器的证据表,它调用一个存储过程,它基本上按月进行表分区.但是,当我开始在加载下插入大​​量行时,我得到一个模糊的错误:

Npgsql.NpgsqlException: query string argument of EXECUTE is null 
Severity: ERROR Code: 22004 at Npgsql.NpgsqlState.<ProcessBackendResponses_Ver_3>d__a.MoveNext() in c:\C#Apps\github.npgsql.Npgsql.stock\src\Npgsql\NpgsqlState.cs:line890 at Npgsql.ForwardsOnlyDataReader.GetNextResponseObject() in c:\C#Apps\github.npgsql.Npgsql.stock\src\Npgsql\NpgsqlDataReader.cs:line 1175 at 
    Npgsql.ForwardsOnlyDataReader.GetNextRowDescription() in c:\C#Apps\github.npgsql.Npgsql.stock\src\Npgsql\NpgsqlDataReader.cs:line 1191    at 
    Npgsql.ForwardsOnlyDataReader.NextResult() in c:\C#Apps\github.npgsql.Npgsql.stock\src\Npgsql\NpgsqlDataReader.cs:line 1377    at 
    Npgsql.NpgsqlCommand.ExecuteNonQuery() in c:\C#Apps\github.npgsql.Npgsql.stock\src\Npgsql\NpgsqlCommand.cs:line523
Run Code Online (Sandbox Code Playgroud)

我的系统具有自动重试功能,最终每个记录都插入到数据库中,但是在负载很高的许多异常之后.

数据库是CentOS 6服务器上的PostgreSQL 9.3,客户端是使用Npgsql驱动程序的C#.NET.

表:

CREATE TABLE evidence
(
  id uuid NOT NULL,
  notification_id uuid NOT NULL,
  feedback character varying(200),
  result character varying(20),
  trigger_action_type character varying(200),
  trigger_action_id uuid,
  data_type integer NOT NULL,
  data bytea,
  name character varying(30),
  CONSTRAINT pk_evidence PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

触发: …

c# postgresql plpgsql npgsql postgresql-9.3

4
推荐指数
1
解决办法
7812
查看次数

Azure Postgres:主机“ 0.0.0.0”,用户“ UserName”,数据库“ orders”,SSL上没有pg_hba.conf条目

我有一个正在开发中的Azure网站,可连接到新的Azure Postgresql数据库。

这个错误似乎是在周末开始的。上次我上周五尝试时,它运行良好。我的Azure网站计划的IP地址似乎已更改,因此我编辑了Azure Postgres防火墙规则。

真正奇怪的部分是“ 0.0.0.0”主机。Web服务器对数据库的IP地址为“ 0.0.0.0”的样子如何?我确实也向防火墙添加了“ 0.0.0.0”,但这没有任何效果。我当然不能直接在Azure上编辑pg_hba.conf文件。

另外,从我的开发计算机运行时,它也可以正常工作。我尝试重新部署我的网站,没有任何乐趣。

这是完整的堆栈跟踪:

[PostgresException (0x80004005): 28000: no pg_hba.conf entry for host "0.0.0.0", user "UserName", database "orders", SSL on]
Npgsql.NpgsqlConnector.DoReadMessage(DataRowLoadingMode dataRowLoadingMode, Boolean isPrependedMessage) +310
Npgsql.NpgsqlConnector.ReadMessageWithPrepended(DataRowLoadingMode dataRowLoadingMode) +195
Npgsql.NpgsqlConnector.HandleAuthentication(String username, NpgsqlTimeout timeout) +57
Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout) +299
Npgsql.ConnectorPool.Allocate(NpgsqlConnection conn, NpgsqlTimeout timeout) +573
Npgsql.NpgsqlConnection.OpenInternal() +366
Npgsql.NpgsqlConnection.Open() +4
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +120
System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +160
System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +108
MapHazardsPro4.Functs.GetUserTable() …
Run Code Online (Sandbox Code Playgroud)

postgresql azure npgsql azure-web-sites

4
推荐指数
1
解决办法
2877
查看次数