如何在C#中从Npgsql 4.1.5.0执行匿名块PL/pgSQL(PostgreSQL 13)?
我有这个匿名块PL/PGSQL: DO $$ DECLARE secuencial INT; BEGIN SELECT MAX("CodigoFactura") + 1 INTO secuencial FROM "Factura"; IF secuencial IS NULL THEN secuencial := 1; END IF; RAISE NOTICE '%', secuencial; END; $$ 匿名块PL/pGSQL从NPGSQL执行: NpgsqlConnection npgsqlConnection = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=myBase;User Id=user;Password=password;"); npgsqlConnection.Open(); string sentencialSQL = "D
8 2024-04-24
编程技术问答社区
PostgreSQL错误:EXECUTE的查询字符串参数为空
我有一张名为触发器的证据,该表称为存储过程,该过程基本上按月按月进行了分区.但是,当我开始在加载下插入大​​量行时,我会遇到一个晦涩的错误: Npgsql.NpgsqlException: query string argument of EXECUTE is null Severity: ERROR Code: 22004 at Npgsql.NpgsqlState.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 a
86 2024-04-21
编程技术问答社区
为什么PostgreSQL数组访问在C语言中比在PL/pgSQL中快得多?
i有一个表格架构,其中包括一个int数组列和一个自定义聚合函数,该函数汇总了数组内容.换句话说,给定以下内容: CREATE TABLE foo (stuff INT[]); INSERT INTO foo VALUES ({ 1, 2, 3 }); INSERT INTO foo VALUES ({ 4, 5, 6 }); 我需要一个返回{ 5, 7, 9 }的" sum"函数.正确工作的PL/PGSQL版本如下: CREATE OR REPLACE FUNCTION array_add(array1 int[], array2 int[]) RETURNS int[] AS $$ DECLARE result int[] := ARRAY[]::integer[]; l int; BEGIN --- --- First check if either input is NULL, and return the other if it is
12 2024-04-06
编程技术问答社区
Python Postgres 从一个DB上的表插入数据到另一个DB上的表的最佳方法
我有以下Python代码,该代码在Postgres DB1上复制表的内容,并插入Postgres DB2上的类似表. 我想使用批量插入物加快它.我如何实现这个 import psycopg2 import sys import os all_data = [] try: connec = psycopg2.connect("host = server1 dbname = DB1 ") connecc = psycopg2.connect("host = server2 dbname = DB2 ") connec.autocommit = True connecc.autocommit = True except: print("I am unable to connect to the database.") cur = connec.cursor() curr = connecc.cursor() cur.exe
10 2024-04-05
编程技术问答社区
PL/pgSQL中的BREAK语句
如何在PostgreSQL中拥有break语句?我有这样的结构: for() { for() { if(somecondition) break; } } } 根据我的理解,它只能打破内部for循环? 解决方案 PL/PGSQL . CONTINUE CONTINUE CONTINUE CONTINUE CONTINUE CONTINUE CONTINUE CONTINUE CONTINUE CONTINUE CONTINUE 在循环的下一次迭代中继续进行. 您可以将>附加到循环中,并将其添加为参数.然后,您终止/继续标记为循环.其他 DO DO DO DO/a>语句). 所有这些都适用于PL/PGSQL的程序元素, sql. 使用这三个: 的代码示例 函数中的循环无效 其他解决方案 请注意,是:是!即使您最终(像我一样;-))也需要"何时" LOOP ... IF l_my_va
16 2024-04-03
编程技术问答社区
在PostgreSQL中禁用表的DELETE?
对于安全敏感的设计,我想在某些表上禁用DELETEs DELETE应该仅在行上设置deleted标志(然后在视图上可见,该视图将由应用程序层使用). 我了解规则会产生其他查询 - 因此规则无法抑制该规则原始查询. 作为插图一个带有触发器的玩具示例(尚未测试): -- data in this table should be 'undeletable' CREATE table article ( id serial, content text not null, deleted boolean default false ) -- some view that would only show articles, that are NOT deleted ... -- toy trigger (not tested) CREATE OR REPLACE FUNCTION suppress_article_delete() RETURNS
22 2024-03-19
编程技术问答社区
PLPGSQL功能是原子吗?
我想知道plpgsql函数调用的原子性以及嵌套调用: 所以,例如,我想将两个信息放入两个不同的表格中: CREATE OR REPLACE FUNCTION email_registration( i_email TEXT, i_nickname TEXT ) RETURNS JSONB AS $$ BEGIN DECLARE o_account "UserAccount"; o_identity "UserIdentity"; BEGIN INSERT INTO "UserAccount" (nickname) VALUES (i_nickname) RETURNING * INTO o_account; INSERT INTO "UserIdentity" (email) VALUES (i_email) RETURNING * INTO o_identity; RETURN jsonb_build_object(
28 2024-03-18
编程技术问答社区
被遗忘的赋值运算符"="和常见的":="。
PL/PGSQL的文档说,变量的声明和分配是用:=完成的. 但是一个简单的,较短的和更现代的 (请参阅脚注) =似乎可以按预期工作: CREATE OR REPLACE FUNCTION foo() RETURNS int AS $$ DECLARE i int; BEGIN i = 0; WHILE NOT i = 25 LOOP i = i + 1; i = i * i; END LOOP; RETURN i; END; $$ LANGUAGE plpgsql; > SELECT foo(); 25 请注意,PL/PGSQL可以清楚地区分分配和比较,如行 所示 WHILE NOT i = 25 LOOP 所以,问题是: 我没有在文档中找到一些提及和/或解释这一点的部分? 使用=而不是:=
16 2024-03-17
编程技术问答社区
如何在Postgres的选择语句中评估表达式
Postgres 9.1+数据库包含客户和产品. 在客户表中,客户价格被描述为每个客户的价格表达列中的SQL表达式. 如何从此数据创建价格列表? 我尝试了下面的代码,但由于eval()未定义,因此出现了错误. create table customer ( id int primary key, priceexpression text ); insert into customer values (1, 'price*0.95'),(2,'cost+12.0' ); create table product ( id char(20) primary key, price numeric(12,4), cost numeric(12,4) ); insert into product values ('PRODUCT1', 120, 80),('PRODUCT2', 310.5, 290); select customer.id as custom
10 2024-03-15
编程技术问答社区
在PL/pgSQL中把一个数组导出为CSV文件
我有一个函数,它返回setof text [].此功能的样本结果: {080213806381,"personal data1","question 1",answer1,"question 2",answer2,"question 3","answer 3"} {080213806382,"personal data1","question 1",answer1,"question 2",answer2,"question 3","answer 3"} 我正在用一个语句形成每一行: resultRow := array_append(resultRow, fetchedRow.data::text); ,然后: RETURN NEXT resultRow; 这是我的复制命令: COPY( SELECT myFunction() ) TO 'D:\test_output.csv' WITH (FORMAT 'csv', DELIMITER E',',
8 2024-03-07
编程技术问答社区
PostgreSQL: 列名进入数组 PL/pgSQL
create or replace function extr( tabname text ) returns text[] as $$ declare cols text[]; begin execute 'array(select column_name::text from information_schema.columns where table_name = '||quote_literal(tabname)||');' into cols; return cols; end; $$ language 'plpgsql'; select extr('test'); 一个人提供表名,并希望将其列名称作为数组.上面的代码在"数组"或附近给出"语法错误".如何解决此问题? 解决方案 查询应以select开始,而不是array,并且不必是动态的SQL. 尝试此修改版本: create or replace function extr( tab
20 2024-03-06
编程技术问答社区
在plpgsql测试案例中,数组没有被SELECT查询所返回
选择查询我正在使用: SELECT ARRAY[table_name,pg_size_pretty(table_size)] FROM ( SELECT table_name, pg_table_size(table_name) AS table_size, pg_indexes_size(table_name) AS indexes_size, pg_total_relation_size(table_name) AS total_size FROM ( SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name FROM information_schema.tables where table_schema not in ('pg_catalog', 'information_sc
10 2024-03-06
编程技术问答社区
填充多维数组
我正在尝试在PostgreSQL上填充多维阵列,但这行不起作用.在我的代码下方: CREATE OR REPLACE FUNCTION teste() RETURNS void AS $BODY$ DECLARE tarifas NUMERIC[7][24]; a INTEGER; b INTEGER; BEGIN FOR a IN 0..6 LOOP RAISE NOTICE 'TESTE TESTE %', a; FOR b IN 0..23 LOOP RAISE NOTICE 'tarifas[%][%] = 0;', a, b; tarifas[a][b] = 0; END LOOP; END LOOP; END $BODY$ LANGUAGE plpgsql
12 2024-03-06
编程技术问答社区
在文本数组上应用`trim()`和`regexp_replace()`。
我试图将一个postgresql文本阵列转换为一个值,其中每个值都被每个值替换为每个值,每个值都被每个侧面的字符包围.换句话说,我试图在文本数组中的每个值上应用trim()和regexp_replace().这一切都是在数据库函数中完成的. CREATE OR REPLACE FUNCTION manipulate_array(multiplevalues text[]) RETURNS text[] AS $BODY$ DECLARE singlevalue text; BEGIN FOREACH singlevalue IN ARRAY multiplevalues LOOP SELECT trim(regexp_replace(singlevalue, '\s+', ' ', 'g')) INTO singlevalue;
12 2024-03-06
编程技术问答社区
带有array_agg()的函数的返回类型
我正在尝试创建一个返回一系列字符串的函数,我可以在没有函数的情况下完成此操作并返回record[]类型,当我尝试返回该类型的结果时,不支持. CREATE OR REPLACE FUNCTION alarmEventList(sampleid integer , starttime timestamp without time zone , stoptime timestamp without time zone) RETURNS text[] AS $$ DECLARE result record[]; BEGIN select array_agg(result) from (select to_char("Timestamp", 'YYYY-MM-DD HH24:MI:SS'), "AlertLevel" , "Tim
8 2024-03-06
编程技术问答社区
如何在PostgreSQL 9.6及以下版本中洗牌?
以下自定义存储功能 - CREATE OR REPLACE FUNCTION words_shuffle(in_array varchar[]) RETURNS varchar[] AS $func$ SELECT array_agg(letters.x) FROM (SELECT UNNEST(in_array) x ORDER BY RANDOM()) letters; $func$ LANGUAGE sql STABLE; 是在PostgreSQL 9.5.3中改组字符数组: words=> select words_shuffle(ARRAY['a','b','c','d','e','f']); words_shuffle --------------- {c,d,b,a,e,f} (1 row) ,但是现在我切换到PostgreSQL 9.6.2函数停止工作: words=> select wor
10 2024-03-06
编程技术问答社区
如何获得一个数组元素的类型?
我正在编写多态 pl/pgsql函数,该功能在数组上迭代.我有兴趣使用FOREACH,但是我不知道如何用正确的类型声明临时变量. 我的功能在下面,有关更多信息,请参见第4行上的评论. CREATE OR REPLACE FUNCTION uniq(ary anyarray) RETURNS anyarray AS $$ DECLARE ret ary%TYPE := '{}'; v ???; -- how do I get the element type of @ary@? BEGIN IF ary IS NULL THEN return NULL; END IF; FOREACH v IN ARRAY ary LOOP IF NOT v = any(ret) THEN ret = array_append(ret, v); END IF; END LOOP; RETURN ret; END; $$ LAN
8 2024-03-06
编程技术问答社区
选择整数数组的每个第一元素到数组中
如何选择整数数组数组数组的每个第一个元素? {{1,2,3},{2,15,32},{5,16,14},...} - > {1,2,5,...} 解决方案 由于PostgreSQL将允许在数组大小之外要求切片,并且假设永远不会超过999个子阵列,我们可以使用此怪兽 WITH data AS ( SELECT array[array[1,2,3], array[2,15,32], array[5,16,14]] as arr) SELECT array_agg(arr) FROM (SELECT unnest(arr[1:999][1]) as arr from data) data2; 您当然可以使常数999如果需要,这只是我在那里扔的随机大数字. 之所以如此复杂的原因是,如果您仅使用arr[1:999][1],您仍然会得到二维数组,但只有第一个元素.在这种情况下,{{1}, {2}, {5}}.如果我们使用unnest(),我们可以将其制成一个集合,然后
22 2024-03-05
编程技术问答社区
Postgresql JDBC表的有价值参数
MSSQL 具有一个出色的功能,称为表值参数.它使您可以将自定义数据的表传递到存储过程和功能. 我想知道使用jdbc的 postgresql 中的等效物是什么? 我知道通过 arrays 作为函数参数的选择,但这似乎仅限于 postgresql 数据类型. 考虑以下PL/PGSQL代码: CREATE TYPE number_with_time AS( _num float, _date timestamp ); 和此功能标头: CREATE OR REPLACE FUNCTION myfunc(arr number_with_time[]) 任何人都可以使用用户定义的数据类型来调用该功能的JDBC驱动程序发布Java代码? 解决方案 假设您想从客户端传递 .如果数据库中的值已经存在,则还有其他更简单的方法. composite_type的数组的语法 我知道将数组作为函数参数传递的选项,但是 这似乎仅限于PostgreSQL数据
22 2024-03-05
编程技术问答社区