我们的网络应用程序类似于 - 用户可以创建群组(也可以请求成为群组成员)、提问、回答等。它仍处于开发阶段。我想要做的是紧密结合一些表。
例如- 每当新成员加入一个组时(即当该表正在更新时),应检查他/她是否是有效用户,或者每当有人在组中提出问题时,在将问题插入表之前,它应该检查该用户是否是该组的成员等。
我不能使用外键进行这些检查,因为组 mmbers 是以这种方式存储的
group_id members
mygroup member1,member2,member3
group001 member2,member10,member2,..<br>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它们是通过分隔逗号存储的。所以我不能放置外键约束。
我不想在每个 servlet 中进行这些检查。我想在插入时在数据库本身中执行它们。请告诉我如何进行此操作?
谢谢你。
我想知道是否可以在具有NOT NULL约束的列中插入“空”字符串。
我正在使用 PostgreSQL,尽管这可能也适用于其他数据库管理系统。
查询如下所示
INSERT INTO originators(originator, id, regexp)
VALUES ('null', 1, -1);
Run Code Online (Sandbox Code Playgroud)
这是表设计:
CREATE TABLE originators
(
originator varchar(30) NOT NULL
, id int NOT NULL
, regexp int NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
这里原始列有一个NOT NULL约束,所以表中不应该有 NULL 值。
但是,当我查询表时,我看到的是:
????????????????????????????????? ? 创始者?ID ?正则表达式? ????????????????????????????????? ? 空值 ?1 ? -1 ? ?????????????????????????????????
这怎么可能?
我已经安装了pgadmin3version 1.10.2,但是当它连接到 PostgreSQL 服务器版本 9.2 时,它说:
警告:
此版本的 pgAdmin 仅在 PostgreSQL 8.4 及以下版本上进行过测试,可能无法在此服务器上正常运行。请升级 pgAdmin。
然后它会抛出这个错误:
发生了错误:
错误:“datconfig”列不存在第 1 行:...b.dattablespace AS spcoid、spcname、datallowconn、datconfig、...
等等。
此外,pgAdmin3由于我使用的是 Ubuntu Lucid,所以我对我的工作版本很不满意。那么 pgAdmin3 是否有解决方法可以正常工作以保持我当前版本的 pgAdmin3?
我想使用用户定义的函数,以便在列中插入值时,我想通过引用同一表中的其他列来将月份的last_day 插入一列中。
我的代码是-
insert into table_A
(id,pma_timestamp,monthend)
values
(103,'2017-08-15',last_day(pma_timestamp));
Run Code Online (Sandbox Code Playgroud)
但出现错误:
提示:表“table_a”中有一个名为“pma_timestamp”的列,但无法从这部分查询中引用它
如何解决这个问题
现在我serial在PostgreSQL 13中生成表主键,但是今天我发现ID跳跃并且ID空间有很大的间隙。会浪费很多ID。我阅读了文档,发现 PostgreSQL 有identity作为 SQL 标准生成的主键。我找到了在新版本的PostgreSQL中使用的建议identity,但我不知道ID是否连续。
在 PostgreSQL 13 中我应该怎么做才能获得没有间隙的主键 id?
解决方案1:我尝试更改serial为identity这样:
BEGIN;
ALTER TABLE public.article ALTER id DROP DEFAULT; -- drop default
DROP SEQUENCE public.article_id_seq; -- drop owned sequence
ALTER TABLE public.article
-- ALTER clientid SET DATA TYPE int, -- not needed: already int
ALTER id ADD GENERATED ALWAYS AS IDENTITY (RESTART 2270886);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
还是有差距。
解决方案 2:我尝试添加关于我的应用程序插入文章的 Redis 分发锁,如下所示:
def save_single(guid, pub_time, title, author, content, source, link):
if content …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种可以生成创建 SQL 的方法,例如SQL选择约束时的 PgAdmin 选项卡。(pg admin 是怎么做的?)
我想实现一个通用方法,可以在处理后删除并重新创建外键约束。
我想知道,在制作和存储数据库转储时,有关转储格式的行业标准是什么?
是否将其转储为自定义格式的压缩且不可读的存档,或者只是简单的 .sql?
这是与数据库无关的问题,但以下是 PostgreSQL 的示例来说明这一点:
# MYDATABASE to CUSTOM ARCHIVE
pg_dump -Fc mydatabase > mydatabase.dump
Run Code Online (Sandbox Code Playgroud)
与
# MYDATABASE to SQL
pg_dump -h localhost -U postgres pagila > mydatabase.sql
Run Code Online (Sandbox Code Playgroud) 用于on conflict实现upsert行为是一个很棒的功能。我想知道是否要找到该功能的 RFC,是否可以找到一种使用on conflict事件来调用函数的方法,或者使用类似以下内容的方法:
on conflict
do $$
insert into another table
$$
Run Code Online (Sandbox Code Playgroud)
否则,考虑到我自己对 postgresql 还很陌生,有没有办法“捕获”冲突以进行进一步干预。
PostgreSQL: 9.4
FreeBSD: 11.2
当我将TimeZone参数设置为postgresql.conf时,localtime在尝试启动 PostgreSQL 时收到以下错误。
service postgresql restart
<2022-06-02 11:18:27.612 EDT> LOG: invalid value for parameter "TimeZone": "localtime"
<2022-06-02 11:18:27.613 EDT> FATAL: configuration file "/usr/local/pgsql/data/postgresql.conf" contains errors
pg_ctl: could not start server
Examine the log output.
Run Code Online (Sandbox Code Playgroud)
在我的搜索过程中,我发现了这个对应关系,这似乎表明 /etc/localtime 应该是一个符号链接。我的不是,所以我尝试将其更改为符号链接,但它仍然不起作用,因为我得到了与上面相同的错误。
mv /etc/localtime /etc/localtime.bak
ln -s /usr/share/zoneinfo/America/Yellowknife
shutdown -r now
ls -la /etc/localtime
lrwxr-xr-x 1 root wheel 35 Jun 2 11:04 /etc/localtime -> /usr/share/zoneinfo/America/Yellowknife
Run Code Online (Sandbox Code Playgroud)
可以开始TimeZone工作localtime吗FreeBSD …
我正在尝试使用 CTE 将一些随机数据插入表中 -
create table foo (id integer)
with x as (select random())
insert into foo (id)
select x from x
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误:
ERROR: column "id" is of type integer but expression is of type record
只是 CTE 的select作品:
with x as (select random())
-- insert into foo (id)
select x from x
Run Code Online (Sandbox Code Playgroud)
我也无法打字:
with x as (select random())
insert into foo (id)
select x::integer from x
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误:ERROR: cannot cast type record to integer。
出了什么问题以及如何解决?