小编Dar*_*roo的帖子

在同一个表上使用多个 JOIN 查询的替代方法?

我有一个 Postgresql 11 数据库。假设我有一张桌子,叫做houses。它应该有数十万条记录。

CREATE TABLE houses (
  pkid serial primary key,
  address varchar(255) NOT NULL,
  rent float NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

现在,我的房子有我想在数据库中注册的功能。由于可能的功能列表会很长(几十个)并且会随着时间的推移而演变,因为我不想在表屋中添加一长串列并使用“ALTER TABLE”不断更改表,我想到了这些功能有一个单独的表格:

CREATE TABLE house_features (
   pkid serial primary key,
   house_pkid integer NOT NULL,
   feature_name varchar(255) NOT NULL,
   feature_value varchar(255)
);
CREATE INDEX ON house_features (feature_name, feature_value);
ALTER TABLE house_features ADD CONSTRAINT features_fk FOREIGN KEY (house_pkid) REFERENCES houses (pkid) ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

平均而言,每个房屋记录在house_features表中将有 10-20 条记录。

到目前为止,这似乎是一个简单高效的模型:我可以添加尽可能多的不同功能,控制上层(应用层和/或 GUI)中feature_namefeature_value的可能值。每次应用程序发展时我都不必更改数据库,我需要一种新的功能。 …

postgresql relational-division query-performance

3
推荐指数
1
解决办法
217
查看次数

为整个脚本声明变量

我有一个 PostgreSQL 10 脚本,我想在开始时为其声明一次变量,然后在整个脚本中使用它们(带有可能的事务)。

我知道我可以做到:

DO $$
DECLARE test float := 0.1 ;
BEGIN
    < do whatever here>
END $$
Run Code Online (Sandbox Code Playgroud)

但这使我每次有 BEGIN / END 块时都声明变量。

postgresql postgresql-10

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