Postgresql 通过递增id从select查询创建插入查询

Postgresql 通过递增id从select查询创建插入查询,postgresql,Postgresql,我试图从一个表中复制数据,并用一些不同的字段插入其中。在这里插入它会导致一个问题,我必须指定id(主键),它应该是自动递增的,但由于某些原因,在创建表时没有设置为serial。我希望根据现有数据在要插入的数据中添加一个递增id 任何帮助都将不胜感激 WITH my_admin_id AS ( SELECT id FROM dashboard_admin WHERE email = 'someone@somedomain.com' ), get_admin AS ( SELECT

我试图从一个表中复制数据,并用一些不同的字段插入其中。在这里插入它会导致一个问题,我必须指定id(主键),它应该是自动递增的,但由于某些原因,在创建表时没有设置为serial。我希望根据现有数据在要插入的数据中添加一个递增id

任何帮助都将不胜感激

WITH my_admin_id AS
(
  SELECT id
  FROM dashboard_admin
  WHERE email = 'someone@somedomain.com'
),
get_admin AS
(
  SELECT id
  FROM dashboard_admin
  WHERE user_id IN (SELECT id FROM auth_user WHERE username = 'demo')
),
get_admin_projects AS
(
  SELECT *
  FROM dashboard_project
  WHERE admin_id IN (SELECT * FROM get_admin LIMIT 1)
  AND   is_deleted = 'false'
) INSERT INTO dashboard_project
(
  SELECT id,
  name,
  created_date,
  (SELECT * FROM my_admin_id LIMIT 1)AS admin_id,
  category_id,
  subcategory_id,
  is_deleted FROM get_admin_projects
)
更新:

在执行要插入的select查询之前,获取了以下结果

67  1stAd   2017-04-21 15:25:16.430889  100 18  47  false
71  2stAd   2017-05-12 10:18:55.383967  100 34  90  false
在这里,我刚刚添加了一个查询来获取max id。我只需要为最终select查询中的每个记录增加它

WITH my_admin_id AS
(
  SELECT id
  FROM dashboard_admin
  WHERE email = 'someone@somedomain.com'
),
get_admin AS
(
  SELECT id
  FROM dashboard_admin
  WHERE user_id IN (SELECT id FROM auth_user WHERE username = 'demo')
),
get_max_project AS
(
  SELECT MAX(id) FROM dashboard_project
),
get_admin_projects AS
(
  SELECT id,
         name,
         created_date,
         admin_id,
         category_id,
         subcategory_id,
         is_deleted
  FROM dashboard_project
  WHERE admin_id IN (SELECT * FROM get_admin LIMIT 1)
  AND   is_deleted = 'false'
) (SELECT (SELECT * FROM get_max_project) id,
       name,
       created_date,
       (SELECT * FROM my_admin_id LIMIT 1) AS admin_id,
       category_id,
       subcategory_id,
       is_deleted
FROM get_admin_projects)
101 1stAd   2017-04-21 15:25:16.430889  100 18  47  false
101 2ndAd   2017-05-12 10:18:55.383967  100 34  90  false
这是执行select查询时的结果值

WITH my_admin_id AS
(
  SELECT id
  FROM dashboard_admin
  WHERE email = 'someone@somedomain.com'
),
get_admin AS
(
  SELECT id
  FROM dashboard_admin
  WHERE user_id IN (SELECT id FROM auth_user WHERE username = 'demo')
),
get_max_project AS
(
  SELECT MAX(id) FROM dashboard_project
),
get_admin_projects AS
(
  SELECT id,
         name,
         created_date,
         admin_id,
         category_id,
         subcategory_id,
         is_deleted
  FROM dashboard_project
  WHERE admin_id IN (SELECT * FROM get_admin LIMIT 1)
  AND   is_deleted = 'false'
) (SELECT (SELECT * FROM get_max_project) id,
       name,
       created_date,
       (SELECT * FROM my_admin_id LIMIT 1) AS admin_id,
       category_id,
       subcategory_id,
       is_deleted
FROM get_admin_projects)
101 1stAd   2017-04-21 15:25:16.430889  100 18  47  false
101 2ndAd   2017-05-12 10:18:55.383967  100 34  90  false

最后,使用我添加到max id中的row_number()窗口函数,将值增加到max id以上,使其工作如下

WITH my_admin_id AS
(
  SELECT id
  FROM dashboard_admin
  WHERE email = 'someone@somedomain.com'
),
get_admin AS
(
  SELECT id
  FROM dashboard_admin
  WHERE user_id IN (SELECT id FROM auth_user WHERE username = 'demo')
),
get_max_project AS
(
  SELECT MAX(id) FROM dashboard_project
),
get_admin_projects AS
(
  SELECT id,
         name,
         created_date,
         admin_id,
         category_id,
         subcategory_id,
         is_deleted
  FROM dashboard_project
  WHERE admin_id IN (SELECT * FROM get_admin LIMIT 1)
  AND   is_deleted = 'false'
) 
insert into dashboard_project (SELECT ((SELECT * FROM get_max_project)  + row_number() over ()) as id,
       name,
       created_date,
       (SELECT * FROM my_admin_id LIMIT 1) AS admin_id,
       category_id,
       subcategory_id,
       is_deleted
FROM get_admin_projects)