标签: postgresql

postgresql 中的紧密耦合表

我们的网络应用程序类似于 - 用户可以创建群组(也可以请求成为群组成员)、提问、回答等。它仍处于开发阶段。我想要做的是紧密结合一些表。
例如- 每当新成员加入一个组时(即当该表正在更新时),应检查他/她是否是有效用户,或者每当有人在组中提出问题时,在将问题插入表之前,它应该检查该用户是否是该组的成员等。
我不能使用外键进行这些检查,因为组 mmbers 是以这种方式存储的

group_id    members

mygroup     member1,member2,member3
group001    member2,member10,member2,..<br>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它们是通过分隔逗号存储的。所以我不能放置外键约束。

不想在每个 servlet 中进行这些检查。我想在插入时在数据库本身中执行它们。请告诉我如何进行此操作?
谢谢你。

postgresql

0
推荐指数
1
解决办法
137
查看次数

在 PostgreSQL 的表中插入一个 'NULL' 字符串

我想知道是否可以在具有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 ?
?????????????????????????????????

这怎么可能?

postgresql null

0
推荐指数
1
解决办法
3343
查看次数

pgAdmin3 无法正确连接到 Postgres 9.2

我已经安装了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?

postgresql pgadmin

0
推荐指数
1
解决办法
4053
查看次数

提示:表“table_a”中有一个名为“pma_timestamp”的列,但无法从这部分查询中引用它

我想使用用户定义的函数,以便在列中插入值时,我想通过引用同一表中的其他列来将月份的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”的列,但无法从这部分查询中引用它

如何解决这个问题

postgresql insert

0
推荐指数
1
解决办法
3322
查看次数

新版本的 PostgreSQL 中 IDENTITY 是否连续?

现在我serial在PostgreSQL 13中生成表主键,但是今天我发现ID跳跃并且ID空间有很大的间隙。会浪费很多ID。我阅读了文档,发现 PostgreSQL 有identity作为 SQL 标准生成的主键。我找到了在新版本的PostgreSQL中使用的建议identity,但我不知道ID是否连续。

在 PostgreSQL 13 中我应该怎么做才能获得没有间隙的主键 id?

在此输入图像描述

解决方案1:我尝试更改serialidentity这样:

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)

postgresql identity

0
推荐指数
1
解决办法
1061
查看次数

如何生成约束sql?

我正在寻找一种可以生成创建 SQL 的方法,例如SQL选择约束时的 PgAdmin 选项卡。(pg admin 是怎么做的?)

我想实现一个通用方法,可以在处理后删除并重新创建外键约束。

postgresql constraint scripting

0
推荐指数
1
解决办法
585
查看次数

数据库应该转储为 SQL 格式还是自定义存档?

我想知道,在制作和存储数据库转储时,有关转储格式的行业标准是什么?

是否将其转储为自定义格式的压缩且不可读的存档,或者只是简单的 .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)

postgresql dump recovery restore

0
推荐指数
1
解决办法
381
查看次数

是否可以使用“冲突”事件调用函数?

用于on conflict实现upsert行为是一个很棒的功能。我想知道是否要找到该功能的 RFC,是否可以找到一种使用on conflict事件来调用函数的方法,或者使用类似以下内容的方法:

on conflict
do $$
insert into another table
$$
Run Code Online (Sandbox Code Playgroud)

否则,考虑到我自己对 postgresql 还很陌生,有没有办法“捕获”冲突以进行进一步干预。

postgresql

0
推荐指数
1
解决办法
984
查看次数

在 Postgresql 中,如何将本地时间作为时区以在 FreeBSD 上工作?

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工作localtimeFreeBSD …

postgresql postgresql-9.4

0
推荐指数
1
解决办法
318
查看次数

无法在 CTE 中使用 INSERT

我正在尝试使用 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

出了什么问题以及如何解决?

postgresql cte

0
推荐指数
1
解决办法
45
查看次数