PostgreSQL根据现有表自动创建列

时间:2019-02-28 11:14:19

标签: sql postgresql

我使用的是postgreSQL,当我创建新用户时,我想自动将username表中users表中profiles的值插入handle中。

是否可以通过SQL语句来实现?

用于清除:

首先,我添加一个新用户:

insert into users (email, user_name, first_name, last_name, active, created_at) values ('john@doe.com', 'johndoe', 'John', 'Doe', true, '2018-03-16T17:39:54Z');

之后,我为此用户创建一个配置文件:

insert into profiles (user_id, handle, name, city) VALUES (2, 'johndoe', 'John Doe', 'Tawala');

通过此步骤,应自动将user_name的值写入handle表中的profiles列,而无需手动进行。 是否有SQL函数之类的解决方案?

这是我的桌子:

CREATE TABLE IF NOT EXISTS users (
  id serial UNIQUE NOT NULL,
  email varchar(255) NOT NULL,
  user_name varchar(255) NOT NULL,
  first_name varchar(255) NOT NULL,
  last_name varchar(255) NOT NULL,
  active bool DEFAULT TRUE,
  created_at DATE
);

CREATE TABLE IF NOT EXISTS profiles (
  id serial UNIQUE NOT NULL,
  user_id serial NOT NULL,
  handle varchar(255) NOT NULL,
  name varchar(255) NOT NULL,
  city varchar(255) NULL,
  FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE ON 
  UPDATE CASCADE
);

1 个答案:

答案 0 :(得分:1)

是的,您可以使用"github.com/lib/pq"子句var id int var username string var activities []string sqlStatement := ` SELECT id, username, activities FROM users WHERE id = $1 ` stmt, err := db.Prepare(sqlStatement) if err != nil { // handle err } defer stmt.Close() row := stmt.QueryRow(1) err = row.Scan( &id, &username, pq.Array(&activities) // used here ) if err == sql.ErrNoRows { // handle err } if err != nil { // handle err }

组合它们
WITH

Demo