将本地数据库表数据复制到Mac OSX中的docker postgtesql数据库中

时间:2019-03-15 03:59:47

标签: ruby-on-rails postgresql docker

我正在Rails应用程序中工作并将应用程序部署到docker。我的本地数据库中有大约100个带有数据的表。我想将这些表数据推送到docker postgresql db中。如何将本地数据库表数据复制到docker中postgtesql数据库?我在下面添加了docker ps日志。

# Generate Sample Data
gen.sample <- function(n){
  x <- runif(n,min = -5,max = 5)
  y <- ifelse(x < 0,-1,1)
  return(data.frame(x,y))
}

# Objective function L_D
obj_fun <- function(X,y,alpha){
  N <- length(X) 
  inner.product <- numeric(N)
  for(i in 1:N){
    for(k in 1:N){
      inner.product[k] <- alpha[i]*alpha[k]*
        y[i]*y[k]*(t(as.numeric(X[i]))%*%as.numeric(X[k]))
    }
  }
  L_D <- sum(alpha) - 0.5*sum(inner.product)
  return(L_D)
}

# L_D works when N = 10
set.seed(4997)
options(digits = 4,scipen = -4)
N = 10
sample.data <- gen.sample(n=N)
X.data <- sample.data$x
y.vec <- sample.data$y

alpha.vector <- matrix(rep(c(-5,-4,-3,-2,-1,0,1,2,3,4,5),11*N),ncol = 11, nrow = N, byrow = TRUE)
for(j in 1:N){
  alpha.vector[j,2] <- rnorm(1,5,5)
}

for(i in 1:N){
  print(obj_fun(X = X.data, y = y.vec, alpha =  alpha.vector[i,]))
}

# It produces all NA when N = 12

set.seed(4997)
options(digits = 4,scipen = -4)
N = 12
sample.data <- gen.sample(n=N)
X.data <- sample.data$x
y.vec <- sample.data$y

alpha.vector <- matrix(rep(c(-5,-4,-3,-2,-1,0,1,2,3,4,5),11*N),ncol = 11, nrow = N, byrow = TRUE)
for(j in 1:N){
  alpha.vector[j,2] <- rnorm(1,5,5)
}

for(i in 1:N){
  print(obj_fun(X = X.data, y = y.vec, alpha =  alpha.vector[i,]))
}
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA

1 个答案:

答案 0 :(得分:0)

您可以使用以下命令从本地/远程postgres创建转储:

pg_dump dbname > dbname.sql

接下来,您可能需要通过docker-compose或dbname.sql将此文件docker run -v挂载在容器中的以下目录下:

/docker-entrypoint-initdb.d/

当容器启动时,它将把文件恢复到数据库中,正如您在docker-entrypoint.sh中看到的postgres图像所示。它具有运行sql,sql.gz,sh文件的功能。

例如,假设您在dump.sql中有/home/foo/database_files,并且需要将此dump.sql还原到容器中,然后可以运行以下命令:

dokcer run -v /home/foo/database_files:/docker-entrypoint-initdb.d/ -d --name new_postgres_container postgres

然后运行docker ps以确保新容器正在运行,并且您也可以使用docker logs new_postgres_container

查看日志

或者,您可以在使用-v选项创建本地postgres路径目录的同时将其安装到您的容器中,该选项将传递给docker run命令或将其添加到docker-compose.yml