- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个让我摸不着头脑。在 "function does not exist," but I really think it does 处可能有一个类似的问题。和 PostgreSQL function does not exist但答案似乎不是很明显。 PostgreSQL 9.5。
我有一个基于 Npgsql 的成员资格查询,如下所示:
using (var conn = new NpgsqlConnection(ConnectionString))
{
conn.Open();
using (var comm = new NpgsqlCommand("get_user_by_username", conn))
{
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add("_user_name", NpgsqlDbType.Varchar, 250).Value = username;
comm.Parameters.Add("_application_name", NpgsqlDbType.Varchar, 250).Value = _ApplicationName;
comm.Parameters.Add("_online", NpgsqlDbType.Boolean).Value = userIsOnline;
using (var reader = comm.ExecuteReader())
{
return GetUsersFromReader(reader).OfType<MembershipUser>().FirstOrDefault();
}
}
}
此函数存在于我的 postgresql 数据库中:
CREATE OR REPLACE FUNCTION public.get_user_by_username(
_user_name character varying,
_application_name character varying,
_online boolean)
RETURNS SETOF user_record AS
$BODY$begin
if _online then
return query
update users
set
last_activity = current_timestamp
where
lower(application_name) = lower(_application_name)
and lower(user_name) = lower(_user_name)
returning
user_id,
user_name,
last_activity,
created,
email,
approved,
last_lockout,
last_login,
last_password_changed,
password_question,
comment;
else
return query
select
user_id,
user_name,
last_activity,
created,
email,
approved,
last_lockout,
last_login,
last_password_changed,
password_question,
comment
from
users
where
lower(application_name) = lower(_application_name)
and lower(user_name) = lower(_user_name);
end if;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION public.get_user_by_username(character varying, character varying, boolean)
OWNER TO (configured db login);
我已经对连接字符串进行了检查、双重检查和三次检查……它指向这个数据库,并且具有正确的登录名。该函数在 pgAdmin 窗口中执行良好。
我的连接字符串类似于:
Server=localhost;Port=5432;Database=mysecuritydb;User Id=(configured db login);Password=(my password);Pooling=true;ConvertInfinityDateTime=true;
然而,当我在我的 asp.net 项目中使用它作为引用库时,我收到以下消息:
Server Error in '/' Application.
42883: function get_user_by_username(_user_name => character varying, _application_name => character varying, online => boolean) does not exist
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: Npgsql.PostgresException: 42883: function get_user_by_username(_user_name => character varying, _application_name => character varying, online => boolean) does not exist
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[PostgresException (0x80004005): 42883: function get_user_by_username(_user_name => character varying, _application_name => character varying, online => boolean) does not exist]
我已经使用这个库一段时间了,但这是我第一次看到这个消息。有什么我想念的吗?
最佳答案
注意 postgres 允许 function overloading , 因此不仅函数 NAME 需要存在,而且函数参数的类型也将用于确定使用哪个重载,例如
CREATE OR REPLACE FUNCTION public.get_user_by_username(varchar, varchar, boolean)
和
不是同一个函数CREATE OR REPLACE FUNCTION public.get_user_by_username(varchar, boolean, varchar)
等
当调用这些函数时,参数名称、类型和可能的顺序必须全部匹配,否则你会得到
Npgsql.PostgresException: 42883: function does not exist
另一个一直困扰我的问题是 Postgressql 在定义函数时区分大小写的规则。例如,没有任何 ""
引号,下面的函数定义(使用 pgAdmin 3 中的默认设置):
CREATE FUNCTION MySchema.MyFunction(Parameter1 VARCHAR(40), parameTer2 VARCHAR(20))
使用签名注册函数:(使用IDE工具验证)
myschema.myfunction(parameter1 VARCHAR(40), parameter2 VARCHAR(20))
因此,在 C# 中尝试绑定(bind)到
command.Parameters.Add("Parameter1", NpgsqlDbType.Varchar, 40);
command.Parameters.Add("parameTer2", NpgsqlDbType.Varchar, 20);
将因错误而失败。相反,您需要绑定(bind)全小写参数,即
command.Parameters.Add("parameter1", NpgsqlDbType.Varchar, 40);
command.Parameters.Add("parameter2", NpgsqlDbType.Varchar, 20);
除非你用引号定义函数:
CREATE FUNCTION "MySchema"."MyFunction"("Parameter1" VARCHAR(40), "parameTer2" VARCHAR(20))
这就是为什么在您的数据库/组织中就大小写约定达成一致并坚持使用它很重要(all lowercase 很常见)
另一种方法虽然也很脆弱,但根本不绑定(bind)命名参数,而是使用参数的序号位置来绑定(bind)它,例如
var myParameter = new NpgsqlParameter
{
// Leave `ParameterName` out entirely,
Direction = ParameterDirection.Input,
IsNullable = false,
NpgsqlDbType = NpgsqlDbType.Varchar,
Size = 20,
Value = "SomeValue"
};
command.Parameters.Add(myParameter);
// Same for other parameter(s)
关于c# - Npgsql/PostgreSQL : "function does not exist" error message when it does,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44814675/
我的 postgresql 有问题,我复制了所有文件,然后将其删除。然后,我安装了新的,问题就解决了。现在可以将旧文件和文件导入新文件吗? 最佳答案 如果它们是相同的主要版本(即 9.0 到 9.0.
我想使用 Postgresql 9.2.2 来存储我的应用程序的数据。我不得不构建一个应该基于数据库级别的触发器(当数据库启动时,这个触发器将被触发并执行。),当 postgresql 服务器启动时是
我已经使用下面的查询从 Postgresql 目录表中获取 Sequence 对象的完整信息 select s.sequence_name, s.start_value, s.minimum_valu
Postgres 版本:9.3.4 我需要执行驻留在远程数据库中的函数。该函数根据给定的参数返回一个统计数据表。 我实际上只是在我的本地数据库中镜像该函数,以使用我的数据库角色和授权来锁定对该函数的访
我在 CentOS 7 上,我正在尝试解决“PG::ConnectionBad: FATAL: Peer authentication failed for user”错误。 所以我已经想出我应该更改
我写了一个触发器函数,在触发器表列名上循环,我从具有不同列的不同表调用该函数。该函数将列名插入到数组中并在它们上循环,以便将值插入到另一个模式和表中。 函数和触发器创建脚本: DROP TRIGGER
PostgreSQL 的默认空闲连接超时是多少,我运行了 show idle_in_transaction_session_timeout 查询并返回了 0,但是值 0 表示此选项被禁用,但我想知道默
我需要将十六进制值存储到数据库表中,谁能推荐我需要用于属性的数据类型? 提前致谢 最佳答案 您可以使用bytea 来存储十六进制格式。更多信息 can be found in the postgres
我有一个具有复合主键的(大)表,由 5 列(a、b、c、d、e)组成。 我想高效地选择具有其中两列 (a + e) 的所有行到给定值。 在 PostgreSQL 中,我需要索引吗?或者数据库会使用主键
在阅读 PostreSQL (13) 文档时,我遇到了 this页面,其中列出了不同日期时间类型的存储大小。 除其他外,它指出: Name Storag
我有两个大整数的巨大表(500 000 000 行)。两列都被单独索引。我正在使用语法批量插入此表: INSERT into table (col1, col2) VALUES(x0, y0), (x
有一台 CentOS7 Linux 机器正在运行(不是由我管理;拥有有限的权限)。 请求在其中设置 PostgreSQL。 刚刚从 CentOS 存储库安装了 PostgreSQL: sudo yum
我在 Ubuntu 18.04 上安装了 Postgresql 10,但不知何故坏了,不会重新启动。我可以重新安装它而不破坏它的数据库,以便我可以再次访问数据库吗? pg_dump 不起作用。 最佳答
我想在 UNIX 中使用 crontab 自动备份 PostgreSQL 数据库。我已经尝试过,但它会创建 0 字节备份。 我的 crontab 条目是: 24 * * * * /home/desk
我已经完成了PG服务器的安装。我希望能够使用 pgAdmin 远程连接到它,但不断收到服务器不听错误。 could not connect to server: Connection refused
Oracle 支持波斯历但需要知道 PostgreSQL 是否支持波斯历? 如果是,那么我们如何在 PostgreSQL 中将默认日历类型设置为 Persian 而不是 Gregorian(在 Ora
假设我们有一个带有表的 SQL 数据库 Person以及访问它的几个应用程序。出于某种原因,我们想修改 Person表以向后不兼容的方式。 保持兼容性的一种潜在解决方案是将表重命名为 User并创建一
我使用 PostgreSQL 中的模式来组织我庞大的会计数据库。每年年底,我都会通过为下一年创建一个新模式来进行协调过程。 新模式的文件是否与旧模式物理分离?或者所有模式一起存储在硬盘上? 这对我来说
我正在尝试使用配置文件中的以下配置参数调整 PostgreSQL 服务器: autovacuum_freeze_max_age = 500000000 autovacuum_max_workers =
我的数据包含数据库列中的表情符号,即 message_text ------- 🙂 😀 Hi 😀 我只想查询包含表情符号的数据的行。在 postgres 中是否有一种简单的方法可以做到这一点?
我是一名优秀的程序员,十分优秀!