我有一个大表(2,000,000 行),我想将每条记录打印到屏幕上,一次一个,而不将整个表加载到内存中。
//pseudo code
var cmd = new NpgSQLCommand();
cmd.CommandText = "SELECT * FROM mytable;"
IReader reader = cmd.ExecuteReader(); //blocks until the entire set is returned
while(reader.Read()) //ideally each call to read loads more results from the db.
{
// print record name
}
Run Code Online (Sandbox Code Playgroud)
正如上面代码中所指出的,在整个集合加载到内存中之前,ExecuteReader() 不会继续。我如何改变这种行为以便结果被流式传输?
谢谢
ETA:虽然这看起来像是家庭作业,但事实并非如此。这只是描述问题的一种更简单的方法,该问题涉及使用单个查询读取整个表,但一次处理一行结果。
预计到达时间 x2:
来自 npgsql 警告:调用 ExecuteReader 和大型表时存在一个已知问题。当前Npgsql 的版本 1 在返回之前从表中获取所有数据。如果在这种情况下遇到性能不佳的情况,您可能需要使用服务器游标来分页浏览行。为此,您可以使用如下代码:
我花了一天时间尝试将 Entity Framework 6 SQL Server CE 迁移到 PostgreSQL。
我已经很好地复制了数据库,但我似乎无法让数据提供程序正常工作。
首先,我尝试了旧版 2.2.7 版本的 EF 提供程序,它不需要 .NET 4.5(因为我们的项目无法使用它),但这不起作用。我一直在使用NpgsqlConnection而不是SqlConnectionStringBuilder更改 app.config 以具有连接字符串Host(我尝试过,Server但它不喜欢它)和Database值,并确保 EF 部分如下:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
</providers>
</entityFramework>
Run Code Online (Sandbox Code Playgroud)
我现在忽略了这个限制,只是为了尝试让它工作,所以我有 EF 提供程序的 EF6 v3.1.1 版本和最新的 .NET 提供程序 (v3.2.2),但它们也不起作用。
为了修复它,我还尝试通过安装 VS2015 扩展将 EDMX 从 SQL Server CE 重新同步到 PostgreSQL 替换,但它只是给出一条消息,指出发生了错误,所以我尝试了以下操作:https://github.com/npgsql/npgsql/issues/1514 进一步打开了窗口,但当我在框中输入内容时就崩溃了。自从将项目升级到.NET 4.5后,这个提供程序就不再出现了......
我已经多次尝试重新安装所有内容并多次重新启动 VS,并且自从升级以来我还尝试安装 GAC 文件,因为不清楚 VS 扩展是否需要它们(也是 v3.2.2)。
有谁能够阐明如何最简单地实现所有这些工作,最好不需要 .NET 4.5?
谢谢
postgresql npgsql sql-server-ce entity-framework-6 visual-studio-2015
我使用带有 EF core 的 Npgsql 为演示控制台应用程序建立与 PostgreSQL 的连接。但我收到一个异常“初始化字符串的格式不符合从索引 0 开始的规范”。我认为这是因为连接字符串存在一些问题。任何帮助表示赞赏。
我正在尝试在 C# 应用程序中使用 ExecuteReader 从表中检索所有列。Db 是 postgre。为了测试,我按照教程创建了一个控制台应用程序,该教程确实展示了如何使用函数进行查询,但不使用传递参数。控制台应用程序函数用于测试
static void Main(string[] args)
{
// Connect to a PostgreSQL database
NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;User Id=postgres; " +
"Password=pes;Database=pmc;");
conn.Open();
// Define a query
NpgsqlCommand command = new NpgsqlCommand("SELECT * from audit.exception_gl_accounts()", conn);
// Execute the query and obtain a result set
NpgsqlDataReader dr = command.ExecuteReader();
// Output rows
while (dr.Read())
Console.Write("{0}\t{1} \n", dr[0], dr[1]);
conn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
在 NpgsqlCommand 中,我将不带参数的查询发送到函数audit.exception_gl_accounts,它运行良好。现在我如何将参数传递给这样的函数
“从 sms.get_accounts_info(@AccountNumber) 选择*;
我正在尝试使用此函数检索所有 5 列并获取这些对象
public static string GetAccountInfo(string accountNumber) …Run Code Online (Sandbox Code Playgroud) 我想从 PostgreSQL(在我的本地机器上)获取数据到 Power BI 桌面。我尝试了此处给出的解决方案(在 PowerBI 中安装 ngpsql 以使用 PostgreSQL),但没有奏效。
基本上,我安装了最新版本的 ngpsql(3.2.4),并带有安装到 GAC 的选项。但是,我在 Power BI 中遇到了同样的错误,说连接器需要一个或多个附加组件。
我错过了任何步骤吗?我在网上查看,但没有找到任何关于此的最新文档。
很感谢任何形式的帮助。
谢谢
使用 ConfigurationDbContext 时 Assembly IdentityServer4.EntityFramework.Storage
并用IdentityServer4.Models.Client实体
播种数据库
我收到以下错误:PostgresException:23502:“Id”列中的空值违反了非空约束
我查看了数据库,结果发现该列的类型是integer,尽管我希望它是serial.

您可以在下面看到负责列创建的部分迁移代码:
migrationBuilder.CreateTable(
name: "Clients",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Run Code Online (Sandbox Code Playgroud)
和
modelBuilder.Entity("IdentityServer4.EntityFramework.Entities.Client", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
Run Code Online (Sandbox Code Playgroud)
此基础上文档https://www.npgsql.org/efcore/value-generation.html,呼吁ValueGeneratedOnAdd()在integer列应导致serial数据库类型。
对此有什么想法吗?
entity-framework npgsql entity-framework-core asp.net-core-2.0
我正在尝试使用 Npgsql2 库从 PostgreSQL 10.5 数据库中选择数据 - 我无法使用 Npgsql3 或 Npgsql4,因为我需要支持 Windows XP(最高 .NET 4.0)。\n我使用以下代码:
\n\nvar builder = new NpgsqlConnectionStringBuilder();\n//setting connection string variables here\nvar connection = new NpgsqlConnection(builder.Tostring());\nvar query = "SELECT * FROM \\"TableName\\" ORDER BY \\"ColumnName\\"";\nvar adapter = new NpgsqlDataAdapter(query, connection);\nvar dataSet = new DataSet();\n\nconnection.Open();\nadapter.Fill(dataSet);\nRun Code Online (Sandbox Code Playgroud)\n\n如果我在查询中没有对 TableName 或 ColumnName 使用双引号 - 则会失败并出现错误:
\n\n\n\n\nPostgreSQL 错误:42P01:关系 \xe2\x80\x9cTableName\xe2\x80\x9d 不存在
\n
用双引号就可以了。
\n\n那么是否可以使用不带双引号的Npgsql呢?有旗帜什么的吗?
\n新手,抱歉。我正在阅读 Entity Framework Core、npgsql 和 PostgreSQL(所有这些都是新的!!)有人可以非常友善地解释或指出我在哪里阅读:我正在尝试使用代码创建一个全新的数据库。
根据我读到的内容,我直接使用 pgadmin 或脚本创建数据库。我想做的是通过代码创建一个数据库(这样用户就可以安装 Postgresql 和我的网站,但不必担心 PostgreSQL 的任何直接 SQL 命令)。
谢谢你!
我正在学习learn.microsoft.com上的EF Core with MVC教程。
我有以下迁移:
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace ContosoUniversity.Migrations
{
public partial class ComplexDataModel : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<DateTime>(
name: "EnrollmentDate",
table: "Student",
type: "timestamp with time zone",
nullable: true,
oldClrType: typeof(DateTime),
oldType: "timestamp with time zone"
);
migrationBuilder.AlterColumn<string>(
name: "Title",
table: "Course",
type: "character varying(50)",
maxLength: 50,
nullable: false,
oldClrType: typeof(string),
oldType: "text"
);
// migrationBuilder.AddColumn<int>(
// name: "DepartmentID",
// table: "Course",
// type: "integer",
// nullable: …Run Code Online (Sandbox Code Playgroud) 据我所知,COPYPostgres 中的命令支持事务,但我没有看到使用NpgsqlConnection.BeginBinaryImport. 不支持吗?